使用awk/diff/sed/grep从文件进行比较时打印不匹配的值



我试图打印两个文件中一些不匹配的字符串,其中第一个文件中有一些用空格分隔的整数值的字符串,第二个文件中也有一些字符串值,这些值与第一个文件的一些字符串值相匹配,但前面没有指定任何整数。

使用下面的awkdiff命令,当与第二个文件相比时,我试图获得第一个文件的不匹配数据。

当使用awk时,它将生成第一个文件的内容,基本上它将打印传递给awk命令的最后一个参数的内容。

awk -F, 'FNR==NR {a[$1];next} !($0 in a)' f2 f1

当使用diff时,它将生成第二个文件的内容,这里它将打印传递的第一个参数的内容。

diff --changed-group-format='%<' --unchanged-group-format='' f2 f1

f1

papaya   10
apple    23
Moosumbi 44
mango    32
jackfruit 15
kiwi  60
orange 11
strawberry 67
banana 99
grapes 21
dates 6

f2

apple
mango
kiwi
strawberry

预期结果

papaya   10
Moosumbi 44
jackfruit 15
orange 11
banana 99
grapes 21
dates 6

这是awk中非常常见的操作:将f2中的值读取到数组中,然后在处理f1时,只打印f2数组中不存在第一个字段的行:

awk 'NR == FNR {f2[$1]; next} !($1 in f2)' f2 f1

我还打算建议@shellter使用grep命令,但他击败了我(不过你应该添加-w选项,以匹配整个单词(。

最新更新