awk比较2个文件中的多列

时间:2018-09-05 14:37:03

标签: awk file-comparison

我想比较2个文件中的多列,而不是打印符合我的条件的行。 例如:

file1

apple  green  4
orange  red  5
apple  yellow 6
apple  yellow 8
grape  green 5

file2

apple  yellow 7
grape  green 10

输出

apple  green  4
orange  red  5
apple  yellow 8

我想删除$1$2file1对应$1$2file2以及{{1 $3中的}}小于file1中的$3。 我现在只能完成工作的第一部分,即删除file2中的$1$2对应{{1}中的file1$1的行1}}(字段由制表符分隔):

$2

您能帮我申请最后一个条件吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

在构建数组时存储第三个字段值,然后将其用于比较

$ awk -F '\t' 'FNR==NR{a[$1FS$2]=$3; next} !(($1FS$2 in a) && $3 > a[$1FS$2])' f2 f1
apple   green   4
orange  red 5
apple   yellow  6
grape   green   5

更好地写为:

awk -F '\t' '{k = $1FS$2} FNR==NR{a[k]=$3; next} !((k in a) && $3 > a[k])' f2 f1

答案 1 :(得分:2)

这是你的追求:

awk '(NR==FNR){a[$1,$2]=$3; next}!(($1,$2) in a) && a[$1,$2] < $3))' <file2> <file1>