私は次の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
前にトリックを追加します。この場合は、配列となるプログラムの変数名になります。 。_
_1
awk
例は次のとおりです。
% awk 'BEGIN {1 = 3}'
awk: cmd. line:1: BEGIN {1 = 3}
awk: cmd. line:1: ^ syntax error
% awk 'BEGIN {_1 = 3}' # runs fine
しかし、意図的にゴルフをするのではない場合は、より良いメンテナンスのためにプログラムで読み取ることができる変数名を使用する必要があります。