我正在尝试编写一个小的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中的每个术语重复相同的命令,它不起作用。
有人可以帮我解决这个问题吗?
答案 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