grepスクリプト - 同時にエコーする出力ライン

grepスクリプト - 同時にエコーする出力ライン

私が作った簡単なスクリプトを改善したいと思います。

単一のパラメータに対しては正しく実行され、必要に応じて動作しますが、すべてのパラメータ値に対して並列にまたは同時に実行する際にいくつかの問題があります。複数の引数で実行し、grepの結果を順次ではなく同時に出力するようにこれを改善したいのですが、これは良い選択ではありませんか?この出力を行うのを手伝ってくれてありがとう。とても感謝しています。

  • 複数のファイルがあります。 file1.log file1.txt file2.log file2.txt
  • *.logと*.txtからいくつかのコンテンツを収集する必要があります。
  • すべてのパラメータのgrep行を同じエコーに出力します。

これまで私のスクリプトは次のようになりました。

#!/bin/bash

filename=$@



error=$(grep  'ERROR' ${filename}.l)
phone=$(grep 'phone'  ${filename}.e)
invalid=$(grep  'invalid' ${filename}.l)

while true ; do 

echo -e  " Start of message \n :  
         $error \n
         $invalid \n
        $phone \n
          End of message \n "

break 
done 
exit

これが私が望む出力結果です。

Start of message 

error form  file1
Phone number from file1
Invalid from file1

error form  file2
Phone number from file2
Invalid from file2

error form  file3
Phone number from file3
Invalid from file3 

etc 

End of message 

答え1

$@は文字列ではなく配列なので、実際に必要なのはループを使用して配列を繰り返すことです。この試み:

#!/bin/bash
for filename in "$@"; do
   error=$(grep  'ERROR' "${filename}.l")
   phone=$(grep 'phone'  "${filename}.e")
   invalid=$(grep  'invalid' "${filename}.l")
   echo -e  " Start of message \n :
      $error \n
      $invalid \n
      $phone \n
      End of message \n "
done 
exit 

答え2

echo "Start of message "

for file in "$@"
do

error=$(grep  'ERROR' ${file}.l)
phone=$(grep 'phone'  ${filee}.e)
invalid=$(grep  'invalid' ${file}.l)

echo -e  "${error} from ${file}\n ${phone} from ${file}\n  $invalid from ${file}\n\n"

done
echo -e "End of message \n"

関連情報