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.txt
file2.txt
cobafull.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.txt
coba.txt
cobafull.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
引数リストでファイルの順序を変更すると、期待どおりに機能します。