我在使用 awk 和 shellscript 操作日志文件时遇到困难

我在使用 awk 和 shellscript 操作日志文件时遇到困难

我对 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数组是如何工作的,我强烈建议你自己尝试一下。

相关内容