ファイルの内容からロードし、他のファイルで cat と grep を使用するスクリプトを作成しています。問題は、grepを実行しても値が表示されないことです。コマンドを手動で実行すると、データが取得されます。
私は中を使用しましたが、問題は同じです。 output6.txt は常に空です。 echoが動作しているようで、grepまたはcatの問題のようです。
BlockspamCLIs.txt の例 次の値があります。
4412345
441236
2367890
All_events.csv ファイルの例
1,441236,20220909120909,test
2,441237,20220909120909,test
3,441232,20220909120909,test
4,44136,20220909120909,test
5,2367890,20220909120909,test
出力として数値を含むCSVファイルを検索、保存、記録したいです。たとえば、次のようになります。
1,441236,20220909120909,test
5,2367890,20220909120909,test
私のスクリプト:
for i in `cat BlockspamCLIs.txt`
do
grep $i *_All_events.csv >> output6.txt
echo $i
done
よろしくお願いします。
ベストアンサー1
まず、これらのタスクを実行するためにシェルスクリプトを使用しないでください、遅く、エラーが発生しやすいです。とにかく、grep
必要なものをすでに実行することが可能です。
grep -f BlockspamCLIs.txt *_All_events.csv >> output6.txt
からman grep
:
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. If this option is
used multiple times or is combined with the -e (--regexp)
option, search for all patterns given. The empty file contains
zero patterns, and therefore matches nothing.
次に、シェルループを使用してファイルの内容を繰り返す場合、絶対にこれをしないでください。for i in $(cat file)
。また、さまざまな問題を回避するために常に変数を引用する必要があります。たとえば、 の行にBlockspamCLIs.txt
スペースが含まれていると、コマンドは機能しません。
つまり、行にスペースやシェルワイルドカードがない場合は、表示されるコマンドが機能します。次のように書くことをお勧めします。
while IFS= read -r i; do
grep -e "$i" -- *_All_events.csv >> output6.txt
printf '%s\n' "$i"
done < BlockspamCLIs.txt