sed と 2 つの連続ライン

sed と 2 つの連続ライン

アプリケーションのログファイルがあり、正常にログインできなかったユーザーのみをフィルタリングする必要があります。 (ユーザーID以降は登録可能です。)

ログファイルには次のエントリがあります。

user2
user5
user7
user1
user1
user1 ok
user8
user9
user3
user3 ok

予想される出力は次のようになります。

user2
user5
user7
user8
user9

私の考えでは:

sed "/user/N;/ok/d"

結果がない続いて「ユーザー1」が表示されます。

user2
user5
user7
user1
user8
user9

ベストアンサー1

あなたの質問を間違った方法で理解しない限り、これはうまくいきます。

$ grep -v -f <(grep " ok$" aa.txt |cut -d' ' -f1) aa.txt
user2
user5
user7
user8
user9

効果的にファイル内の「正常」とマークされたすべての名前を見つけ、これらの名前をパターンとして使用して、同じファイルから除外して「異常」ログインを取得します。

これは、user1が最終的に正常にログインしたため(3回の試行後も)、user1は失敗と見なされず、すべてのuser1の試行が除外されるという事実に基づいています。
grep -v: パターンの除外
grep -f: ファイルからパターンを読み込む、成功したログインを保存するプロセスの置換は次のとおりです。

PS1:aa.txtファイルは、私があなたのデータを貼り付けたローカルファイルの1つです。

更新:okの前にスペースを
使用すると、ログイン<(grep " ok$" aa.txt |cut ...)に失敗しましたが、名前に「ok」を含むユーザー名が一致しません(例:Bangokユーザー)。

おすすめ記事