awk構文、変な変数?

awk構文、変な変数?

私は次のawkコマンドを持っています:

awk -F, 'NR==FNR{_1[$1]++;next}_1[$1]' file1 file2

私は実際にプログラムが何をしているのかほとんど知っていますが、_1それが何を意味するのかわかりません。目的は、2つのファイルを比較することです。 1つはフィールドが1つ、もう1つはフィールドが4つです。

これが私がやろうとしていることです。私はこれらのファイルを持っていて、ファイル1のどの番号がファイル2にあるかを知ってから、ファイル2の履歴を印刷する必要があります。

ファイル1

89611862
89613696
84126597
88690669
60147342

ファイル2

84126597,12345300943529348333,2805058C30730000,28
88767631,12345712012010684248,2805058C30730002,28
83218719,12345712012012622594,2805058C30730006,28
89611862,12345712012010174449,2805058C30730014,28
85933710,12345712012007778032,2805058C3073001A,26
88690669,12345712012012060159,2805058C3073001E,28
60147342,12345712012011235922,2805058C30730030,28
89613696,12345712012008043980,2805058C3073003C,28
84783612,12345712012031117926,2805058C3073004C,28
awk -F, 'NR==FNR{arr[$1]++;next}arr[$1]' file1 file2

ただし、最後に見つかったレコードのみを印刷します。

60147342,12345712012011235922,2805058C30730030,28 

ありがとうございます!

答え1

awk数値のみを含む変数名は許可されていません(変数名も数字で始めることはできません)。したがって、1の_1前にトリックを追加します。この場合は、配列となるプログラムの変数名になります。 。__1awk

例は次のとおりです。

% awk 'BEGIN {1 = 3}'
awk: cmd. line:1: BEGIN {1 = 3}
awk: cmd. line:1:          ^ syntax error

% awk 'BEGIN {_1 = 3}'  # runs fine

しかし、意図的にゴルフをするのではない場合は、より良いメンテナンスのためにプログラムで読み取ることができる変数名を使用する必要があります。

関連情報