AWKは2つのファイルを比較します。

AWKは2つのファイルを比較します。

AWKを学んだのは古くはありませんが、まだ混乱しています。 AWKを使用して2つのtxtファイルを比較し、比較結果に基づいてマージされた出力を生成しようとしています。

ファイル1.txt

budi
andi

ファイル2.txt

sinta Sep 29 17:12
andi Sep 15 17:12
kuro Sep 9 17:12
budi Sep 2 17:13

使ってみよう

awk 'FNR==NR{a[$1];next};$NF in a' cobafull.txt coba.txt > result.txt`

これが結果です

budi
andi

私はこの出力が欲しい

budi Sep 2 17:13
andi Sep 15 17:12

あなたのアドバイスが必要です。ありがとうございます。

追加して申し訳ありません

file1.txt = coba.txt
file2.txt = cobafull.txt

答え1

ファイルが次のようにfile1.txt承認された場合:coba.txtfile2.txtcobafull.txt

awk 'NR == FNR {A[$1]=$0; next}; {print A[$0]}' coba{full,}.txt

出力:

budi Sep 2 17:13
andi Sep 15 17:12

出力順序が重要でない場合:

awk 'A[$1]++' coba{,full}.txt

出力:

andi Sep 15 17:12
budi Sep 2 17:13

答え2

これをそれぞれ意味file1.txtし、後者が「より広い」ファイルであると仮定すると、次のようになります。file2.txtcoba.txtcobafull.txt

awk 'FNR==NR{a[$1];next};$NF in a' cobafull.txt coba.txt > result.txt

したがって、「完全な」ファイルを最初に読みます。最初の行を読むと、次のレコードがawk表示されます。

sinta Sep 29 17:12

a["sinta"]次に同じを設定し、"siinta"レコードの処理を停止します。その後、それに従ってファイルの残りの部分を読みます。

次に、2番目のファイルを読み始めます。最初の行を読み、次のレコードを確認します。

sinta

次に、"sinta"そのインデックスが配列にあることを確認してくださいa。その場合は、この時点で単に次のレコードを印刷します。

sinta

引数リストでファイルの順序を変更すると、期待どおりに機能します。

関連情報