Como parte de una receta de archivo MAKE, quiero ajustar repetidamente algunas líneas en algún archivo de texto txt.in
. En particular, quiero actualizar, entre otras cosas, la tercera línea que contiene simplemente dos números separados por un espacio. Deben tener el formato 0.00 0.00
. Como tal, he incluido el siguiente código en mi archivo MAKE para probar si puedo hacer esto.
# Makefile to test for-loop
SHELL=/bin/zsh
for:
for k in 1 2 3; do \
let n="$$k*0.25"; \
let m="$$n+0.25"; \
sed -i "3s/.*/$$n $$m/" txt.in; \
done
Esto produce 0.7500000000 1.0000000000
como resultado final. Puede que haya formas más eficientes de hacer esto y me encantaría conocerlas, pero lo que realmente me gustaría saber es si hay una manera de obtener el formato correcto.
Respuesta1
Tubería la salida a través
sed 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g'
para obtener el formato deseado. Efectivamente, su sed
estado de cuenta cambiará a:
sed -i "3s/.*/$$n $$m/" txt.in | sed -i 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g' txt.in; \
Respuesta2
También puedes usar printf
. Esto le dará relleno cero para números enteros incluso si su shell no lo proporciona:
o="$(printf "%.2f\n" "$$m")"
p="$(printf "%.2f\n" "$$n")"
sed -i "3s/.*/$$o $$p/" txt.in;