我对 awk 有困难。如果第一个字段和第 3 个字段与来自 2 个不同文件的 awk 匹配,我想连接列。可能,最好使用数组函数,我对此很困惑。
输入示例
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
表示当前文件的输入记录数等于总记录数,即正在处理第一个文件),将包含第四、第五、第二字段的字符串a
与第一、第三字段合并保存到数组中与@
作为索引。
当处理第二个文件 ( else if
) 并且当前行的第一个和第三个字段的组合键存在于数组中时,打印第一个和第三个字段、保存的数组值、波形符以及当前行的字段 2 - 5。
你的问题看起来像“家庭作业”,如果你想了解awk
数组是如何工作的,我强烈建议你自己尝试一下。