gawk で NFに入る最大値を調べてみた。
きっかけ
以前、以下のようなファイルを、
1 2 3 4 5 6 7 8 9
以下のように3桁づつ改行を入れたくなるときがあり、
1 2 3
4 5 6
7 8 9
以下のような、awkスクリプトを書きました。
{
for(i=1; i<=NF; i++) {
printf "%d ", $i;
if((i % 3) == 0) print "";
}
}
「あれ、これって入力ファイルがいくつまで対応できるのでしょう?」とふと思いました。
こんなファイルでも大丈夫なのかなと。。。
1 2 3 4 5 6 7 8 9 ... /* このあと大量に数字がつづく*/ .... 9999999999999999999
調査(ドキュメント)
ドキュメントの NF の記載になにか書かれているかも。
NF is a predefined variable whose value is the number of fields in the current record. awk automatically updates the value of NF each time it reads a record. No matter how many fields there are, the last field in a record can be represented by \$NF. So, \$NF is the same as \$7, which is ‘example.’. If you try to reference a field beyond the last one (such as $8 when the record has only seven fields), you get the empty string. (If used in a numeric operation, you get zero.)
「NFに入る最大値は・・・」みたいな記載を期待したが、特になし。
調査(ググる)
ここに、気になる記述が。
Correct. According to info gawk: "The internal representation of all numbers, including integers, uses double-precision floating-point numbers. On most modern systems, these are in IEEE 754 standard format."
たしかに、ドキュメントにも記載がある。
ということで、最大どこまで?
ヒントになりそうなページがあった。
気が向いたら、もう少し調べる。
追記(2020/08/04)
ときどきの雑記帖 Re* にてコメントをいただけていた。
ありがとうございます。
実はマニュアル The GNU Awk User's Guide にこの辺の制限は明記されている (バージョン5になるまではマニュアルではなくソースアーカイブ中のLIMITATIONSというファイルに記載)。
ホントだ。(気づかなかった)
https://www.gnu.org/software/gawk/manual/gawk.html#Implementation-Limitations
Author And Source
この問題について(gawk で NFに入る最大値を調べてみた。), 我々は、より多くの情報をここで見つけました https://qiita.com/SYutaka/items/1c05461d68408f907ef2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .