我有一个文本文件,包含两个制表符分隔的列。我希望 grep 另一个文件中的每一行(即包含两个制表符分隔值的字符串)。第一个文件末尾有一个空行。如果我删除空行,下面的命令可以正常工作。但如果我不这样做,它就不会。
我可以删除该行,但想知道为什么它失败。另外,我尝试在不删除该行的情况下解决该问题的尝试也失败了。请帮忙?谢谢。
如果删除空行,此命令可以正常工作:
grep -wF -f file1 file2 > file3
我尝试通过尝试以下方法来解决问题而不删除该行
grep '.' file1 | grep -wF - file2 > file3
但无法让它发挥作用。
答案1
空模式匹配任何输入行,因此如果您的模式列表中file1
包含一个,则所有行都file2
将匹配。你没有说,但我希望这就是你遇到的问题,至少我想不出空行会导致任何其他问题。
您的 grep 管道看起来不错,只是您需要-f
后一个 grep 的选项:
grep '.' file1 | grep -wF -f - file2 > file3
^^
或者,您可以使用流程替换:
grep -wF -f <(grep '.' file1) file2 > file3
这是 Ksh/Bash/Zsh 的功能:被替换为读取时<( cmd )
生成输出的文件名。cmd