从 awk 中排除相似的值

从 awk 中排除相似的值

请考虑以下文件:

文件一:

boo,194,2322
foo,999,7559

文件2:

boo,2322
boo,4526
foo,4222
foo,4223

我需要Field1链接文件1Field1文件2Field2并从中获取相关信息文件2,同时排除结果(如果它等于Field3in)文件1

结果应该是:

boo,4526
foo,4222,4223

我尝试了下面的脚本,但它不排除类似的值。

awk -F, 'NF==3{arr[$1]=$3}{if(arr[$1]==$1){print $2}}'

答案1

您需要检查是否$1arr,如果是,则该值是否与不同$2,然后打印:

awk -F, 'FNR == NR { arr[$1] = $3; next }
         { if ($1 in arr && arr[$1] != $2) print $2 }'

使用FNR == NRandnext是处理第一个文件中的行与其他文件中的行不同的传统方法。是的,您可以将其平铺到一行,但“一行”是一个贬义词,除非您正在编写 APL(或者可能是 Perl)。

相关内容