Печать длинных целых чисел в awk

У меня есть файл с разделителями каналов, в котором есть несколько полей. Поскольку мне нужно всего несколько, я подумал об использовании awk , чтобы захватить их для целей тестирования. Однако я заметил, что printf изменяет значение, если я использую «% d» . Он отлично работает, если я использую «% s» .

Пример файла канала:

[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 |

Меня интересует захват второго столбца , то есть 19769904399993903 .

Вот мои тесты:

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

Однако следующие два теста работают нормально -

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

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

Итак, это предел в «% d» невозможности обрабатывать длинные целые числа. Если это так, то почему он должен добавить единицу к числу вместо того, чтобы его обрезать?

Я пробовал это с BSD и GNU версиями awk ].

Информация о версии:

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

[jaypal:~/Temp] awk --version
awk version 20070501
8
задан jaypal singh 13 January 2012 в 22:04
поделиться