2

Linuxサーバーで特定の形式のログを取得しています

id \t IP \t login-id \t login-error Code \t attempts

ユーザーが遭遇した可能性のあるすべてのログイン エラー コードを知りたいです。

サンプル ファイルは次のとおりです。

123  10.12.34.234 anshul     11 1
432  10.12.34.234 ra     11 2
342  10.12.34.234 anshul     12 1
445  10.12.34.234 yahoo  3  1

出力は次のようになります。

anshul: 11,12

私が試してみました:

cat aaa | sort +2 -3 | grep anshul | awk -F"\t" {' print $4'}

これは印刷されます

11

12

しかし、次の形式で出力したいanshul: 11,12

値をいくつかの変数に保存し、必要に応じて表示できますか。また、このコードの問題は、それが anshulg か anshuln か anshulp かに関係なく、すべての anshul をキャッチしていたことです。これを解決するための提案。

すべての一意の名前が単一のチャンクにソートされるため、取得しているデータが正しいかどうかを確認するためだけに、ログイン時にソートを行いました。

4

3 に答える 3

0
awk '{a[$3]=a[$3]","$4;next}END{for(i in a)print i,substr(a[i],2)}' <your_file>|grep anshul

または、grep なしで awk を直接使用することもできます。

awk '{a[$3]=a[$3]","$4;next}END{print "anshul",substr(a["anshul"],2)}' <your_file>

以下でテスト:

> cat temp
123  10.12.34.234 anshul     11 1
432  10.12.34.234 ra     11 2
342  10.12.34.234 anshul     12 1
445  10.12.34.234 yahoo  3  1

> awk '{a[$3]=a[$3]","$4;next}END{for(i in a)print i,substr(a[i],2)}' temp
anshul 11,12
ra 11
yahoo 3

> awk '{a[$3]=a[$3]","$4;next}END{for(i in a)print i,substr(a[i],2)}' temp|grep anshul
anshul 11,12
> 
> awk '{a[$3]=a[$3]","$4;next}END{print "anshul",substr(a["anshul"],2)}' temp
anshul 11,12
于 2013-02-14T09:08:49.020 に答える
0

1)単純な解決策ですが,、最後に余分なものが得られます:

cat aaa | grep "anshul" | awk '{print $4}' | tr '\n' ','

出力:11,12,

2) 追加なし,:

tmp=`cat aaa | grep "anshul" | awk '{print $4}' | tr '\n' ','`
echo ${tmp%?}

出力:11,12

もちろん、これを簡単にユーザー名をパラメーターとして取り、「user: anshul error(s): 11,12」のような出力を行うスクリプトに変換できます。

于 2013-02-14T09:12:44.530 に答える
0
#% cat t
123  10.12.34.234 anshul     11 1
432  10.12.34.234 ra     11 2
342  10.12.34.234 anshul     12 1
445  10.12.34.234 yahoo  3  1

一行Perl。

 perl -ane 'BEGIN{$x='anshul';}push @{$X{@F[2]}}, $F[3];END{print "$x: ",join(",",@{$X{$x}}),"\n";}' < t

与えます:

anshul: 11,12
于 2013-02-14T22:57:13.080 に答える