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は感謝します。
答え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