Drucken von langen Ganzzahlen, die in awk

Habe ich eine pipe-delimited-feed Datei, die mehrere Felder. Da ich nur ein paar, ich dachte, der Verwendung von awk zu erfassen, Sie für meine Testzwecke. Jedoch, ich bemerkte, dass printf, ändert sich der Wert wenn ich "%d". Es funktioniert gut, wenn ich "%s".

- Feed-Datei Beispiel:

[jaypal:~/Temp] cat temp

302610004125074|19769904399993903|30|15|2012-01-13 17:20:02.346000|2012-01-13 17:20:03.307000|E072AE4B|587244|316|13|GSM|1|SUCC|0|1|255|2|2|0|213|2|0|6|0|0|0|0|0|10|16473840051|30|302610|235|250|0|7|0|0|0|0|0|10|54320058002|906|722310|2|0||0|BELL MOBILITY CELLULAR, INC|BELL MOBILITY CELLULAR, INC|Bell Mobility|AMX ARGENTINA SA.|Claro aka CTI Movil|CAN|ARG|

Ich bin interessiert bei der Erfassung der second column die 19769904399993903.

Hier meine tests:

[jaypal:~/Temp] awk -F"|" '{printf ("%d\n",$2)}' temp
19769904399993904   # Value is changed

Jedoch die folgenden beiden tests gut funktioniert -

[jaypal:~/Temp] awk -F"|" '{printf ("%s\n",$2)}' temp
19769904399993903   # Value remains same

[jaypal:~/Temp] awk -F"|" '{print $2}' temp
19769904399993903   # Value remains same

So ist dies ein limit von "%d" nicht in der Lage zu handhaben, lange Ganzzahlen. Wenn das der Fall ist, warum würde er hinzufügen, um die Nummer statt des vielleicht abschneiden?

Habe ich versucht dies mit BSD und GNU Versionen von awk.

Version Info:

[jaypal:~/Temp] gawk --version
GNU Awk 4.0.0
Copyright (C) 1989, 1991-2011 Free Software Foundation.

[jaypal:~/Temp] awk --version
awk version 20070501
was passiert, wenn die Verwendung awk ist printf "%17.0f\n"? Meine Erfahrung mit awk sagt, Stelle diese Frage auf comp.lang.awk. Viel Glück!
Danke @shellter. Ich bekam das gleiche Ergebnis. Erstaunlicherweise passiert es nur innerhalb der awk. Wenn ich printf %d und mein Wert auf der Kommandozeile druckt er korrekt. Wenn ich das selbe von innen awk's BEGIN Aussage, es verwirrt ihn. 🙂
Drucken der richtigen Anzahl, mit der version von awk, die Teil des UWIN-system. Ich denke, es läuft darauf hinaus, die 'Qualität' der version der C-lib Funktionen verknüpft mit Ihrer version von awk. Auch haben Sie Zugriff auf eine 64-bit-Maschine und einer 64-bit-awk/gawk? Viel Glück.
Hmm leider Nein .. also im Grunde können wir nennen es ein bug ist, wie kann ich tun printf %d auf die CLI und es funktioniert. Es ist seltsam, dass selbst die GNU-version 4.0.0 von awk reproduziert diese.
Die interne printf-Befehl in neue(ish) KES als gefunden in einigen linux (Unbuntu unter anderem) und UWIN wird auch richtig sein, (genau wie die bash). Wie viel Daten sprechen Sie über die Verarbeitung? Und ist off-by-one auf einem 17digit Anzahl wirklich signifikant zu deinem problem?. (oh, das sieht nicht wie finanzielle Daten, so ist es wahrscheinlich signifikant 😉 ). Viel Glück.

InformationsquelleAutor jaypal singh | 2012-01-13

Schreibe einen Kommentar