【发布时间】:2021-12-08 04:15:41
【问题描述】:
我有 awk 命令输出匹配的行数据比较 2 列, 虽然我想输出相反的、不匹配的数据。
#file1.csv
box1,apple
box2,banana
#file2.csv
data24,box1,apple,text
date25,box1,banana,text
我有 AWK,
awk -F',' 'NR==FNR{a[$1,$2]; next} ($2,$3) in a' file1.csv file2.csv
输出如下:
data24,box1,apple,text
并且想拥有:
banana,box2
在这种情况下,简单的否定似乎不起作用,请问您有什么想法吗? 试过了:
awk -F',' 'NR==FNR{a[$1,$2]=1; next} !($2,$1) in a' file1.csv file2.csv
将输出:
data24,box1,apple,text
date25,box1,banana,text
【问题讨论】:
-
(a) 您发布的
awk脚本不会产生指定的输出。 (b) 您正在寻找($2,$3) in a,但例如在file2.csv中,$3是date24或date25,它们永远不会是in a。我认为您使用了错误的列。 -
抱歉,已更新为当前版本
-
我不太了解
awk,但你不能用<>或!=替换==吗? -
在尝试了您的代码(Ubuntu 18.04)后,我根本没有得到任何输出。
-
请edit您的问题向我们展示您尝试使用但不起作用的“简单否定”。您发布的预期输出需要做的不仅仅是
output the opposite, unmatched data,例如它不会打印 file2 中没有出现在 file1 中的值,它会以与当前工作命令不同的顺序打印不同的字段。因此,请确保根据您发布的输入,您发布的预期输出正是您想要的(如果您真的不希望添加这些空白,请删除您在,s 之后添加的空白)。跨度>