awk 命令在比较两个文件时出现意外结果

Awk command has unexpected results when comparing two files

我正在使用 awk 命令比较两个文件中的第一列。

我想获取 file1 的 col1,如果 file2 的 col1 中有匹配项,请更新最后一列中的 "date updated"。如果没有匹配项,我想将 file1 的整行附加到 file2 并向该行附加一个 "date updated" 值。这是我当前使用的命令:

awk 'FNR == NR { f1[] = [=10=]; next } 
     in f1 { print; delete f1[] } 
    END { for (user in f1) print f1[user] }' file1 file2

文件 1:

tnash,172.2,plasma-de+,serv01,datetimeNEW
jhwagner,169.4,plasma-de+,serv01,datetimeNEW
steadmah,161.1,plasma-de+,serv01,datetimeNEW
guillwt,158.3,plasma-de+,serv01,datetimeNEW
mwinebra,122.2,plasma-de+,serv01,datetimeNEW
jbomba,100.0,plasma-de+,serv01,datetimeNEW
mschrode,161.1,plasma-de+,serv01,datetimeNEW

文件 2:

jbomba,114.0,plasma-de+,serv01,datetimeOLD
mschrode,104.0,plasma-de+,serv01,datetimeOLD
deleteme,192.0,random,serv01,datetimeOLD        #<---- Needs to be removed: WORKS!

预期输出:(顺序无关紧要)

tnash,172.2,plasma-de+,serv01,datetimeNEW
jhwagner,169.4,plasma-de+,serv01,datetimeNEW
steadmah,161.1,plasma-de+,serv01,datetimeNEW
guillwt,158.3,plasma-de+,serv01,datetimeNEW
mwinebra,122.2,plasma-de+,serv01,datetimeNEW
jbomba,100.0,plasma-de+,serv01,datetimeOLD      #<---- NEED THIS VALUE
mschrode,161.1,plasma-de+,serv01,datetimeOLD    #<---- NEED THIS VALUE

当前输出:(顺序无关紧要)

tnash,172.2,plasma-de+,serv01,datetimeNEW
jhwagner,169.4,plasma-de+,serv01,datetimeNEW
steadmah,161.1,plasma-de+,serv01,datetimeNEW
guillwt,158.3,plasma-de+,serv01,datetimeNEW
mwinebra,122.2,plasma-de+,serv01,datetimeNEW
jbomba,100.0,plasma-de+,serv01,datetimeNEW      #<----WRONG OUTPUT
mschrode,161.1,plasma-de+,serv01,datetimeNEW    #<----WRONG OUTPUT

逻辑崩溃:

If $usr/col1 in file2 does NOT exist in file1
     remove entire line from file2
     (ex: line3 in file2, user: deleteme)
If $usr/col1 in file1 does NOT exist in file2
      append entire line to file2
      (ex: lines 1-5 in file1)

所以问题是,当两个文件匹配时,我需要保留文件 2 的信息,而不是文件 1 的信息。在上面的输出示例中,您会看到我需要保留 file2 的 datetimeOLD 以及 file1 的新信息。

设置字段分隔符为逗号,先读取file2

$ awk -F',' 'FNR==NR{a[]=[=10=];next}  in a{print a[];next} 1' file2 file1
tnash,172.2,plasma-de+,serv01,datetimeNEW
jhwagner,169.4,plasma-de+,serv01,datetimeNEW
steadmah,161.1,plasma-de+,serv01,datetimeNEW
guillwt,158.3,plasma-de+,serv01,datetimeNEW
mwinebra,122.2,plasma-de+,serv01,datetimeNEW
jbomba,114.0,plasma-de+,serv01,datetimeOLD
mschrode,104.0,plasma-de+,serv01,datetimeOLD