web-dev-qa-db-ja.com

grepがリストのforループで機能しない

いくつかのログファイルがあります。そして、私はユーザーIDのリストを持っています。私のログファイルは特定の形式です

log-yyyy-mm-dd
e.g. log-2014-09-30

ログファイル内の各userIdを検索しようとしています。これが私がしていることです-

for userid in 234, 283, 893, 982, 323; do cat log-2014-09-30 | grep -a "user deleted "$userid  | tail -1; done

理想的には、ファイル内の各ユーザーIDを検索し、最後に一致したものを出力する必要があります。次に、log-2014-09-29で残りのユーザーIDなどを検索します。

ただし、最後のユーザーIDの一致のみを出力します。

INFO - 2014-09-30 22:49:00 - user deleted 323

私は何が間違っているのですか?私を助けてください。

4
Hussain Tamboli

ユーザーIDリストのコンマを削除します。リストをforループに渡す方法は、コンマ区切りではなく、スペース区切りの値をリストに与えることです。

for userid in 234, 283, 893, 982, 323; do echo "$userid";done

プリント

234,
283,
893,
982,
323

だが

for userid in 234 283 893 982 323; do echo "$userid";done

プリント

234
283
893
982
323

だから、あなたはする必要があります

for userid in 234 283 893 982 323; do 
    grep -a "user deleted $userid" log-2014-09-30  | tail -n 1
done
6
PM 2Ring