
awkに問題があります。最初のフィールドと3番目のフィールドが2つの異なるファイルで一致する場合は、列を連結したいと思います。おそらく、配列関数を使用する方が良いと思いますが、これは混乱しています。
入力例
file1
0x11110293030,2019-10-13T12:13:39,8.8.8.8,KeitheNoop,workgroupa
0x22222211111,2019-10-12T12:17:23,8.8.8.8,KattheNoop,workgroups
0x21034922113,2019-10-14T15:12:63,8.8.8.8,KoitheNoop,workgroupz
file2
0x11110293030,2019-10-13T12:22:44,8.8.8.8,KeiLeftAll,workgroupk
0x22222211111,2019-10-14T12:19:23,8.8.8.8,KattheNoop,workgroups
0x21034922113,2019-10-14T15:34:63,8.8.8.8,KoitheNoop,workgroupz
期待される出力
0x11110293030,8.8.8.8,KeitheNoop,workgroupa,2019-10-13T12:13:39 ~ 2019-10-13T12:22:44,8.8.8.8,KeiLeftAll,workgroupk
0x22222211111,8.8.8.8,KattheNoop,workgroups,2019-10-12T12:17:23 ~ 2019-10-14T12:19:23,8.8.8.8,KattheNoop,workgroups
0x21034922113,8.8.8.8,KoitheNoop,workgroupz,2019-10-14T15:12:63 ~ 2019-10-14T15:34:63,8.8.8.8,KoitheNoop,workgroupz
可能であれば、これらのコードがどのように機能するかを簡単に説明してください。ご協力ありがとうございます。
答え1
awk -F',' '{
if (FNR==NR){
a[$1"@"$3]=$4","$5","$2
}
else if ($1"@"$3 in a){
print $1","$3","a[$1"@"$3]" ~ "$2","$3","$4","$5
}
}' file1 file2
最初のファイルが処理されると(FNR==NR
現在のファイルの入力レコード数がレコード全体の数に等しい、つまり最初のファイルが処理されていることを意味します)、4番目、5番目、2番目のフィールドを含む文字列が最初と3番目フィールドと結合されますa
。フィールドはマージされ、配列に@
インデックスとして格納されます。
2番目のファイル(else if
)を処理し、現在行の最初と3番目のフィールドのキーの組み合わせが配列にある場合は、最初と3番目のフィールド、保存された配列値、チルダ、およびフィールド2〜5を印刷します。
あなたの質問は「宿題」のように見えます。配列の仕組みを理解したい場合は、awk
自分で試してみることをお勧めします。