У меня есть файл с разделителями каналов, в котором есть несколько полей. Поскольку мне нужно всего несколько, я подумал об использовании 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