使用 awk/diff/sed/grep 从文件比较时打印不匹配的值
To print unmatched values when compared from files using awk/diff/sed/grep
我试图从两个文件中打印一些不匹配的字符串,在我的第一个文件中有一些字符串和一些用空格分隔的整数值,我的第二个文件也有一些字符串值与一些字符串匹配来自第一个文件的值,但前面没有指定任何整数。
使用下面的 awk
和 diff
命令我试图获得第一个文件与第二个文件不匹配的数据。
当使用 awk
时,它将生成第一个文件的内容,基本上它将打印传递给 awk
命令的最后一个参数的内容。
awk -F, 'FNR==NR {a[];next} !([=11=] 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[]; next} !( in f2)' f2 f1
我还打算建议来自@shellter 的 grep
命令,但他先于我(不过你应该添加 -w
选项,以匹配整个单词)。
我试图从两个文件中打印一些不匹配的字符串,在我的第一个文件中有一些字符串和一些用空格分隔的整数值,我的第二个文件也有一些字符串值与一些字符串匹配来自第一个文件的值,但前面没有指定任何整数。
使用下面的 awk
和 diff
命令我试图获得第一个文件与第二个文件不匹配的数据。
当使用 awk
时,它将生成第一个文件的内容,基本上它将打印传递给 awk
命令的最后一个参数的内容。
awk -F, 'FNR==NR {a[];next} !([=11=] 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[]; next} !( in f2)' f2 f1
我还打算建议来自@shellter 的 grep
命令,但他先于我(不过你应该添加 -w
选项,以匹配整个单词)。