Unix:对inputfile中的每一行执行grep命令,并将输出保存到文件

时间:2016-06-09 09:36:57

标签: bash shell unix

我正在尝试编写一个小的unix脚本来搜索一个文件,查找包含特定术语的行,可以在另一个文件中找到。我想将此命令的输出保存到新文件。

我有一个包含术语(terms.txt)的文件,每行都有一个术语:

term1
term2
term3
term4

对于这些术语中的每一个,我想在另一个文件(scores.txt)中找到包含该术语的行,并将其输出附加到新文件(output.txt)。

到目前为止我提出的脚本:

#!/bin/bash
for f in `cat terms.txt`;
do 
grep -i $f scores.txt >> output.txt;
done

不知何故,这似乎无法正常工作。 只运行带有硬编码术语的grep命令确实给了我正在搜索的正确行:

grep -i "term1" scores.txt 

另外,一个简单的回声确实给了我正确的术语:

for f in `cat terms.txt`; do echo $f; done

但是,当我尝试使用$ f变量重复此操作时,要对我的terms.txt中的每个术语重复相同的命令,它不起作用。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

你可以尝试一下:

grep -if terms.txt scores.txt > output.txt

基本上grep的选项f会将terms.txt文件中的字符串视为要在scores.txt中搜索的模式

如果您的terms.txt有CRLF行结尾,请尝试以下操作:

grep -if <(tr -d '\r' < terms.txt) scores.txt > output.txt