使用awk比较两个文件,每个文件中的第三列匹配,但第二列不匹配 假设file1是: 文件2是: 预期产出应为:

使用awk比较两个文件,每个文件中的第三列匹配,但第二列不匹配 假设file1是: 文件2是: 预期产出应为:,awk,sed,grep,Awk,Sed,Grep,以下是我尝试过的: awk 'NR==FNR{c[$3,$5]++;next};($3 in c[$3]) && !($5 in c[$5]) > 0' file1 file2 像这样的 $ awk 'NR==FNR{a[$3]=$0;next} $3 in a{split(a[$3],r); if($5!=r[5])print}' file2 file1 a b c d f aa bb cc dd ef 正在检查第五个字段是否不匹配 我想,这可以简

以下是我尝试过的:

 awk 'NR==FNR{c[$3,$5]++;next};($3 in c[$3]) && !($5 in c[$5]) > 0' file1 file2
像这样的

$ awk 'NR==FNR{a[$3]=$0;next} 
       $3 in a{split(a[$3],r); if($5!=r[5])print}' file2 file1

a b c d f
aa bb cc dd ef
正在检查第五个字段是否不匹配

我想,这可以简化为

$ awk 'NR==FNR{a[$3]=$5;next} $3 in a && a[$3]!=$5' file2 file1

哦,你是对的,让我来编辑它!如果将
$3、$5
作为键放入
c[]
,则搜索单个值,即
$3
(或
$5
)将永远不匹配。祝你好运。啊,我明白了,我用错阵列了。谢谢你的解决方案是伟大的!
 awk 'NR==FNR{c[$3,$5]++;next};($3 in c[$3]) && !($5 in c[$5]) > 0' file1 file2
$ awk 'NR==FNR{a[$3]=$0;next} 
       $3 in a{split(a[$3],r); if($5!=r[5])print}' file2 file1

a b c d f
aa bb cc dd ef
$ awk 'NR==FNR{a[$3]=$5;next} $3 in a && a[$3]!=$5' file2 file1