Formatieren einer Gleitkommavariable in einer SED-Anweisung

Formatieren einer Gleitkommavariable in einer SED-Anweisung

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.0000000000das 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 sedAnweisung ä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;

verwandte Informationen