使用awk/diff/sed/grep从文件进行比较时打印不匹配的值
我试图从两个文件中打印一些不匹配的字符串,其中在我的第一个文件中有一些整数值的字符串用空格分隔,我的第二个文件也有一些字符串值与第一个文件中的一些字符串值匹配,但是前面没有指定任何整数。
使用以下awk并diff命令我试图用时第二个比较让我的第一个文件的无与伦比的数据。
使用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
我也打算建议grep来自@shellter的命令,但他打败了我(-w尽管你应该添加选项,以匹配整个单词)。