両方のファイルを比較し、一致する行を新しいファイルに送信します。

両方のファイルを比較し、一致する行を新しいファイルに送信します。

ファイルが2つあります。

ファイル1.txt

a|1|cd
a|2|cd
a|4|cd

ファイル2.txt

a|0001|hj|df
a|0002|ed|nb
a|0003|vf|za
a|0004|er|ns
a|0005|oi|lk

ファイルの2番目の列に一致する行を含む新しいファイルを作成するには、ファイルが必要です。次のコードを試してみましょう。

awk -F"|" 'NR==FNR{a[$2]++;next} a[$2] ' file1.txt file2.txt

ただし、2番目の列のfile1.txtの左側に0が含まれていないため、レコードが見つかりません。

awk -F"|" 'NR==FNR{a[$(printf("%09d\n", $2))]++;next} a[$2]'

しかし、うまくいきません。

結果は次のようになります。

ファイル3.txt

a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

答え1

フィールドに0を追加すると、awkはそれを文字列ではなく数値として扱います。

$ awk -F"|" 'NR==FNR{a[$2+0]++;next} a[$2+0] ' file1.txt file2.txt
a|0001|hj|df
a|0002|ed|nb
a|0004|er|ns

0001文字列とは異なるため、1各値に0を追加して数値に変換して目的の比較を生成します。

関連情報