私が作った簡単なスクリプトを改善したいと思います。
単一のパラメータに対しては正しく実行され、必要に応じて動作しますが、すべてのパラメータ値に対して並列にまたは同時に実行する際にいくつかの問題があります。複数の引数で実行し、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"