ubuntuusers.de

BASH: Zahlen (Integer oder Prozent) formatiert ausgeben mit awk / printf

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke shiro:

Du hast offenbar bei der Formel eingestreute Leerzeichen verwendet, die dann als Parameter-Trennzeichen genutzt wurden.

Ich verstehe nicht, wo die sind, ich habe:

1
2
3
function StringConcat() { awk "BEGIN{printf \"$2|\",$1}"; }
strErgebnis+=$(StringConcat $AnzFehl/$AnzSaveYes*100 "%'7.2f %%")
echo "###$AnzFehl###$AnzSaveYes###"

Die Variablen-Werte werden per psql aus einer Datenbank gelesen; die echo-Zeile liefert:

###   203###  2549###

Kein Leerzeichen in den Code-Zeilen 1..3, oder? Trotzdem Fehler ... Mit Anführungszeichen

1
2
strErgebnis+=$(StringConcat "$AnzFehl/$AnzSaveYes*100" "%'7.2f %%")
#                           ^                    ^

wird das korrekte Ergebnis geliefert. Solte ich alle Teilstring-Zeilen mit diesen Anführungszeichen ausstatten?

shiro

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1225

... wird das korrekte Ergebnis geliefert. Solte ich alle Teilstring-Zeilen mit diesen Anführungszeichen ausstatten?

Ja, bitte.

Die von dir gezeigte Ausgabe

$ echo "###$AnzFehl###$AnzSaveYes###"
###   203###  2549###
$ # liefert:
$ echo $AnzFehl/$AnzSaveYes*100
203/ 2549*100
$ 

Wie du siehst, werden die führenden Blanks "ge-squeezed" (wie bei tr -s). Damit die Formel als ein Parameter ($1) verfügbar ist, bitte mit Gänsefüßchen (") quoten. Der printf von awk kann damit umgehen, da er die einzelnen Parameter durch Komma (,) getrennt interpretiert.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke shiro

... wird das korrekte Ergebnis geliefert. Solte ich alle Teilstring-Zeilen mit diesen Anführungszeichen ausstatten?

Ja, bitte.

Erledigt, funktioniert perfekt! Vielen, vielen Dank!

Antworten |