複数のフィールドを持つパイプ区切りのフィード ファイルがあります。少数しか必要ないので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|
をキャプチャすることに興味がsecond column
あり19769904399993903
ます。
ここに私のテストがあります:
[jaypal:~/Temp] awk -F"|" '{printf ("%d\n",$2)}' temp
19769904399993904 # Value is changed
ただし、次の 2 つのテストは問題なく動作します -
[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"
長い整数を処理できないという制限です。その場合、番号を切り捨てるのではなく、番号に 1 を追加するのはなぜですか?
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