我有一个日志文件,名称为out.log。我需要从此日志文件中搜索字符串列表(filelist.txt)。
对于 filelist.txt 中的每个文件,我需要“out.log”中的每个匹配行。它可以出现多次。
cat out.log | grep -i I466030.CXR910E >> search_result.txt
这有效,它将搜索 I466030.CXR910E 并输出到 search_result.txt
for i in `cat filelist.txt`; do grep -i "$i" out.log >> result.txt; done
for i in `cat filelist.txt`;
do
echo $i
cat out.log | grep -i $i >> result2.txt
grep $i out.log >> result3.txt
done
上面的代码 echo 将输出搜索字符串,但 grep 不会将输出写入任何结果*.txt
我在这里缺少什么?谢谢你的建议。
回应评论:
xxxxxm@cxxxrtrls01[DEV][rerun] $ grep -i -f filelist.txt out.log > result.txt
xxxxxm@cxxxrtrls01[DEV][rerun] $ ll
total 564
-rw-r----- 1 cnrlsadm cnrlsadm 4600 Aug 19 09:36 filelist.txt
-rw-r----- 1 cnrlsadm cnrlsadm 216 Aug 19 10:14 file.sh
-rw-r--r-- 1 cnrlsadm cnrlsadm 557403 Aug 19 10:10 out.log
-rw-r--r-- 1 cnrlsadm cnrlsadm 0 Aug 19 12:14 result.txt
-rw-r----- 1 cnrlsadm cnrlsadm 213 Aug 19 12:10 srch.sh
xxxxxm@cxxxrtrls01[DEV][rerun] $
result.txt 的大小为零,其中没有任何内容。
答案1
使用 grep 的
-f
选项来提供包含模式的文件所以你根本不需要循环:grep -i -f filelist.txt out.log > result.txt
现在,您只需调用一次 grep,而不是每行调用一次。如果 out.log 很大,你的 CPU 会感谢你的。
答案2
好吧..这里的大部分回复都是正确的,我的错是“filelist.txt”是从 Excel 和 Windows 中生成的。一旦我将文件转换为unix格式。一切顺利。
我学到了一个非常耗时的教训。感谢每一位回答问题的人:)
祝你有美好的一天!
答案3
尝试使用下面的脚本,效果很好
for i in `cat filelist.txt`
do
for j in `cat out.log`
do
grep -i "$j" $i
done
done
filelist.txt.====> Consists of filenames