grepはリストオーバーループでは機能しません。

grepはリストオーバーループでは機能しません。

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

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

ユーザーIDでログファイルを取得しようとしています。これは私がすることです -

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

私は何が間違っていましたか?助けてください。

ベストアンサー1

ユーザー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

おすすめ記事