Als Teil eines Makefile-Rezepts möchte ich in einer Textdatei wiederholt einige Zeilen anpassen txt.in
. Insbesondere möchte ich unter anderem die dritte Zeile aktualisieren, die einfach zwei durch ein Leerzeichen getrennte Zahlen enthält. Sie sollten als formatiert sein 0.00 0.00
. Daher habe ich den folgenden Code in mein Makefile aufgenommen, um zu testen, ob ich dies tun kann.
# 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
Dies ist 0.7500000000 1.0000000000
das Endergebnis. Es gibt möglicherweise effizientere Möglichkeiten, dies zu tun, und ich würde mich freuen, diese kennenzulernen, aber was mich wirklich interessiert, ist, ob es eine Möglichkeit gibt, das Format richtig zu gestalten.
Antwort1
Leiten Sie die Ausgabe durch
sed 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g'
um das gewünschte Format zu erhalten. Ihre sed
Anweisung ändert sich dann wie folgt:
sed -i "3s/.*/$$n $$m/" txt.in | sed -i 's/\([0-9]\{1,\}\.[0-9][0-9]\)[0-9]*\>/\1/g' txt.in; \
Antwort2
Sie können auch verwenden printf
. Dadurch erhalten Sie Null-Padding für Ganzzahlen, auch wenn Ihre Shell dies nicht bereitstellt:
o="$(printf "%.2f\n" "$$m")"
p="$(printf "%.2f\n" "$$n")"
sed -i "3s/.*/$$o $$p/" txt.in;