比较两个文件的字段

比较两个文件的字段

我有两个这样的文件:

文件 1

apple fruit 10 4
strawberry fruit 22 11
berry fruit 33 33
ball toy 1 12
straw thing 2 33

文件 2

strawberry straw berry
rawberry raw berry

我想比较文件 2 的第 1 列与文件 1 的第 1 列、文件 2 的第 2 列与文件 1 的第 1 列、文件 2 的第 3 列与文件 1 的第 1 列。如果匹配,我想显示文件 1 中的所有三行匹配的内容。

这里,输出应该是:

strawberry fruit 22 11
straw thing 2 33
berry fruit 33 33

如何使用终端上的 Unix 命令执行此操作?

答案1

根据 Arijit Chatterjee 的提议,我建议

grep -Ff <(tr -s " " "\n" < file2) file1

tr -s " " "\n"file2 转换为每行一个单词的输入,更适合grep -Ff

答案2

你可以试试grep -Ff File2 File1

其中,-f File2 从 File2 读取模式,-F 将模式视为固定字符串

答案3

使用awk,您可以将的所有单词放入File2关联数组,然后检查字段 1File2是否为成员:

awk 'NR==FNR {for(i=1;i<=NF;i++) a[$i]++; next} $1 in a' File2 File1
strawberry fruit 22 11
berry fruit 33 33
straw thing 2 33

可以使用哈希来实现类似的解决方案perl

相关内容