Awk 如何使用linux提取multple文件中不匹配的列
我有3个文件。我希望所有3列中的所有字符串都不匹配。我已尝试Awk 如何使用linux提取multple文件中不匹配的列,awk,grep,Awk,Grep,我有3个文件。我希望所有3列中的所有字符串都不匹配。我已尝试 grep -Fvf file2 file1 awk 'NR==FNR{c[$2]++;next};c[$2] == 0' file1 file2 file3 但是没有成功 文件1 ABC 1 Town ABC 2 Rural ABC 3 Town ABC 4 City ABC 5 Urban ABC 6 Town 文件2 文件3 输出 File1 File2 File3 A
grep -Fvf file2 file1
awk 'NR==FNR{c[$2]++;next};c[$2] == 0' file1 file2 file3
但是没有成功
文件1
ABC 1 Town
ABC 2 Rural
ABC 3 Town
ABC 4 City
ABC 5 Urban
ABC 6 Town
文件2
文件3
输出
File1 File2 File3
ABC 3 Town ABC 3 City ABC 3 City
ABC 6 Town ABC 6 Urban ABC 6 Town
您可以结合使用
粘贴
和awk
:
$ paste file1 file2 file3 | awk '$3!=$6 || $3!=$9'
ABC 3 Town ABC 3 City ABC 3 City
ABC 6 Town ABC 6 Urban ABC 6 Town
粘贴
将两个文件连接在一起(通过添加列)
awk
只是检查想要的单词(每个文件的第三个)是否不同,在这种情况下,awk
打印行。定义不匹配?不匹配位置指三个文件中,例如文件1第2列中的第3个位置与文件2和文件3第2列中的第3个位置不匹配。因此,这是所有三列中不匹配的。我有3个不同的文件。啊!3美元=$6 || $3!=$9 || $6!=$9'将处理一个由空格或制表符分隔的文件。请查看将两个文件聚合在一起的paste
命令。++ve提供了很好的解决方案。感谢Oliv和Sundeep
File1 File2 File3
ABC 3 Town ABC 3 City ABC 3 City
ABC 6 Town ABC 6 Urban ABC 6 Town
$ paste file1 file2 file3 | awk '$3!=$6 || $3!=$9'
ABC 3 Town ABC 3 City ABC 3 City
ABC 6 Town ABC 6 Urban ABC 6 Town