bashシェルループのgrepコマンド

bashシェルループのgrepコマンド

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

  1. ファイルから行を読まないでくださいfor

  2. grepの-fオプションを使用して提供パターンを含むファイルしたがって、まったく繰り返す必要はありません。

    grep -i -f filelist.txt out.log > result.txt
    

    これで、1行に1回ではなくgrepを1回だけ呼び出すことができます。 out.logが大きい場合、CPUは感謝します。

おすすめ記事