shell 合并两个文件AWK

kmynzznz  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(144)

我必须合并两个文件,需要以下方面的帮助:
File1.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

File2.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,

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

k4ymrczo

k4ymrczo1#

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

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

要处理空file2.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

相关问题