文書

文書

sourceip="1.1.1.1"などのデータを含むサーバーログがありますusername="aaaa"。ログファイル全体をgrepし、同じIPアドレスで異なるユーザー名を使用して複数のログインを取得するコマンドが必要です。

オペレーティングシステムはCentosで、ログは次のとおりです。

2020-06-22T07:46:04+01:00 srcip=1.1.1.1 user="abcdefg"

各IPがユーザー名を試してみたいです。

ベストアンサー1

使用:

文書

$ cat file
2020-06-22T07:46:04+01:00 srcip=1.1.1.1 user="abcdefg"
2020-06-22T07:46:04+01:00 srcip=1.1.1.1 user="abcdefy"
2020-06-22T07:46:04+01:00 srcip=1.1.1.1 user="abcdefz"
2020-06-22T07:46:04+01:00 srcip=1.1.1.3 user="xxx"

注文する

perl -MRegexp::Common -lne '
    push @{ $h->{$1} }, $2 if /srcip=($RE{net}{IPv4})\s+user="(\w+)"/;
    END{print "$_=" . join " ", @{ $h->{$_}} for keys %$h}
' file

パイプラインから:

zgrep srcip <log_file> |
    perl -MRegexp::Common -lne '
        push @{ $h->{$1} }, $2 if /srcip=($RE{net}{IPv4})\s+user="(\w+)"/;
        END{print "$_=" . join " ", @{ $h->{$_}} for keys %$h}
    '

出力

1.1.1.3=xxx
1.1.1.1=abcdefg abcdefy abcdefz

おすすめ記事