微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 选项,以匹配整个单词)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。