我有两个这样的文件:
文件 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