繁体   English   中英

合并两个文件 AWK

[英]Merge two files AWK

我必须合并两个文件并需要帮助:

文件1.csv

mac-test-2,10.57.8.2,Compliant
mac-test-6,10.57.8.6,Compliant
mac-test-12,10.57.8.12,Compliant
mac-test-17,10.57.8.17,Noncompliant

文件2.csv

mac-test-17,10.57.8.17,2022-10-21

合并后内容应为 Merge.csv

mac-test-2,10.57.8.2,Compliant,NA
mac-test-6,10.57.8.6,Compliant,NA
mac-test-12,10.57.8.12,Compliant,NA
mac-test-17,10.57.8.17,Noncompliant,2022-10-21

所以逻辑是,如果 File1.txt 在 File2.txt 中没有匹配记录,则应插入“NA”,如果匹配,则应在第四列中插入日期。

我在下面写了

awk -F "," '
ARGV[1] == FILENAME{a[$1];next}
{
 if ($1 in a) {  
    print $0 ","
 } else {
  print $0 ",NA"
 }
}
' File2.csv File1.csv

但这是打印

mac-test-2,10.57.8.2,Compliant,NA
mac-test-6,10.57.8.6,Compliant,NA
mac-test-12,10.57.8.12,Compliant,NA
mac-test-17,10.57.8.17,Noncompliant,

如果匹配,我不确定如何打印日期。

使用您显示的示例,请尝试使用以下awk代码。 仅使用您显示的示例编写和测试。

awk '
BEGIN{ FS=OFS="," }
FNR==NR{
  arr[$1]=$NF
  next
}
{
  print $0,($1 in arr?arr[$1]:"NA")
}
' file2.csv file1.csv

要处理空文件 2.csv请尝试以下awk程序。

awk '
BEGIN{ FS=OFS="," }
ARGV[1] == FILENAME{
  arr[$1]=$NF
  next
}
{
  if ($1 in arr) {
    print $0,arr[$1]
  }
  else{
    print $0,"N/A"
 }
}' file2.csv file1.csv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM