2011-11-15 17 views
0

シェルスクリプトでファイルを読み込み、行ごとに処理したいです。私は各行から2つのフィールドを抽出したいと思います。ここに私のコードは次のとおりです。なぜ文字列を分割できないのですか?

#!/bin/bsh 
mlist=`ls *.log.2011-11-1* | grep -v error` 
for log in $mlist 
do 
     while read line 
     do 
       echo ${line} | awk -F"/" '{print $4}' #This produce nothing 
       echo ${line}       #This work and print each line 
     done < $log | grep "java.lang.Exception" 
done 

これは、入力ファイルからのサンプル行です:

<ERROR> LimitFilter.WebContainer : 4 11-14-2011 21:56:55 - java.lang.Exception: File - /AAA/BBB/CCC/DDDDDDDD.PDF does not exist 

私はkshのを使用することができ、BSHを使用していない、との結果が同じである場合。ここにはバッシュはありません。

答えて

4

whileループの出力をgrep "java.lang.Exception"に渡すためです。

echo $line | awk -F"/" '{print $4}'の出力はCCCです。これをgrepにパイプすると、CCCが検索パターンと一致しないため、何も印刷されません。

| grep "java.lang.Exception"を削除してください。ループの出力が正しく出力されます。

取るために別のアプローチは、whileループを削除し、代わりにだけ使用することがあります

grep "java.lang.Exception" $log | awk -F"/" '{print $4}' 
+0

ICを...私はgrepをすることにより、入力を処理してきたと思いました。 grepによって処理される出力は決してわかりません。 – lamwaiman1988