awkが正しいレコード長を表示しないのはなぜですか?

awkが正しいレコード長を表示しないのはなぜですか?

awkレコード長が表示されるのが心配です。特定のレコード長に対していくつかのファイルをチェックしています。 awkは私が望む結果を示していますが、ファイルサイズはファイルの各レコードが実際にawk指定されたものより1バイト大きいことを示しています。

$ ls -l some_file.txt
-rw-r--r--    1 foo   bar           250614 Oct 20 08:49 some_file.txt

$ awk '{ print length }' some_file.txt | sort -u
458

$ echo "(250614%458)" | bc
88

$ echo "(250614%459)" | bc
0

bcレコード長があると結果が間違っていますが、レコード458長がある場合は結果は問題ありません459。またawk、+はsort次のことを示します。みんな録音されたレコード長はです458。私の教育を受けた推測は、これがawk考慮されていないということです行末文字なので、実際のレコード長は459。どう思いますか?

PS:awk点灯AIX 5.3

ベストアンサー1

あなたが見ているのは完全に正常です。デフォルトでは、awk はレコードに改行文字を含めません。

~からawkのPOSIX規格:

入力は一連のレコードとして解釈する必要があります。デフォルトでは、レコードは終了<newline>を引いた1行です
。 ...
文字列関数
   length[([s])] - 対応する引数を文字列または文字単位の全レコード長として返し、存在しない場合は $0 を返します。パラメータ。

おすすめ記事