Verwendung von Awk zum Formatieren von Zahlen mit einem Tausendertrennzeichen

8

Kann mir jemand sagen, wie man den Befehl awk für diese Anweisung verwendet? "Die Zahl enthält Kommas nach jeweils drei Ziffern. Zum Beispiel wird 100000000 zu 100.000.000."

Ich weiß, wie man den Befehl sed verwendet, um diese Ausgabe zu erhalten, aber ich weiß nicht, wie man awk verwendet. Ich bin Anfänger. Bitte sagen Sie mir, dass ich ab dem Morgen suche, aber ich habe keine passende Antwort darauf erhalten. Bitte schlagen Sie mich vor beste Tutorials zum Lernen.

Befehl sed, um die obige Ausgabe zu erhalten:

echo "100000000" | sed -E 's/([0-9]{3})/,\1/2g'
Fehler3735
quelle
1
Welchen Suchbegriff verwenden Sie? Versuchen Sie "Tausendertrennzeichen". FYI GNU awk hat einen
Printf-
2
Ihr sedBefehl macht nicht das, was Sie denken. Es funktioniert nur mit 9-stelligen Zahlen ...
don_crissti
Suchbegriff steht für "im Internet suchen, um dieses
Problem
In Ordung! Ich habe gesehen, dass es nur für 9-stellige Zahlen funktioniert und ich möchte die gleiche Ausgabe für die gleichen Zahlen, aber mit der awk können Sie mir helfen?
Fehler3735

Antworten:

13

Eine vom Gebietsschema unabhängige Lösung mit manueller Formatierung

Dies sollte auf jedem POSIX-kompatiblen Betriebssystem unabhängig von den installierten Gebietsschemas funktionieren.

$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| awk '{ len=length($0); res=""; for (i=0;i<=len;i++) { res=substr($0,len-i+1,1) res; if (i > 0 && i < len && i % 3 == 0) { res = "," res } }; print res }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000

Eine Lösung, die printfdas Gebietsschema en_US verwendet.

Die printfSequenz gibt %'deine Dezimalzahl aus, die mit dem Tausendertrennzeichen des aktuellen Gebietsschemas formatiert ist.

$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 awk '{ printf("%'"'"'d\n", $0) }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
nwk
quelle