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のサイズは0で、内容はありません。
ベストアンサー1
grepの
-f
オプションを使用して提供パターンを含むファイルしたがって、まったく繰り返す必要はありません。grep -i -f filelist.txt out.log > result.txt
これで、1行に1回ではなくgrepを1回だけ呼び出すことができます。 out.logが大きい場合、CPUは感謝します。