2016-08-31 12 views
0

I次のようなログファイルがあります。このログから一意のものだけを印刷する必要があります。印刷Uniqe行

 
3185 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1778 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1770 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1731 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1730 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1729 ms: server-session 192.168.32.9 /db/data/transaction/commit 

たとえば:このログから実行するのにもっと時間がかかる次の行だけを印刷する必要があります。

 3185 ms: server-session 192.168.32.9 /db/data/transaction/commit

、誰もがその-sオプションでuniqを試してみてください私は、この

答えて

0

あなたはすべてのために印刷したい場合は、最高の最初のフィールド(ミリ秒前に数)でレコードをIP、使用:

$ awk 'a[$4]<$1 {a[$4]=$1;b[$4]=$0} END{for(i in a) print b[i]}' test 
2115 ms: server-session 192.168.33.9 /db/data/transaction/commit 
3185 ms: server-session 192.168.32.9 /db/data/transaction/commit 
3145 ms: server-session 192.168.32.10 /db/data/transaction/commit 

を説明:

a[$4]<$1 {   # if the new first field value is more than previous 
    a[$4]=$1  # store the first field 
    b[$4]=$0  # store the whole record with the highest first field 
} 
END {    # in the end 
    for(i in a) # go thru every stored value 
     print b[i] # and print them 
} 

を私が使用as test

$ cat > test 
3185 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1778 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1770 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1731 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1730 ms: server-session 192.168.32.9 /db/data/transaction/commit 
1729 ms: server-session 192.168.32.9 /db/data/transaction/commit 
3185 ms: server-session 192.168.32.9 /db/data/transaction/commit 
3145 ms: server-session 192.168.32.10 /db/data/transaction/commit 
2115 ms: server-session 192.168.33.9 /db/data/transaction/commit 
+0

ありがとうジェームズ、これは本当に完全に役立つ – Renjith

+0

@ジェームスブラウン: - 受け入れられた解決策からのコメントを介して痛みなく読んで、答えを投稿するのではなく、すでに受け入れられた答えで何が間違っている/欠落しているかを指摘するいくつかの礼儀を持ってくださいあなた自身の – Inian

+0

@James Brown:あなたが答えとして投稿したものは、著者の質問の説明の一部でもありません。だから私は自分の答えとそのコメントを削除すると仮定すると、あなたの答えは無意味に見えます。 – Inian

0

のためのソリューションを提案することができれば、私は本当に感謝:

uniq -s 5 file 
2

はに従ってthis-

sort -nk 1 file.txt | tail -1 

ソートしてみてください最初の列と最後の行をピックアップ(これはt彼は最も時間のかかるもの)。

1

awkを使用する単純な解法は、sort,を使用すると、オーバーキルのようです。

awk -v max=0 '{if($1>max){line=$0; max=$1}}END{print line}' file 
3185 ms: server-session 192.168.32.9 /db/data/transaction/commit 
+0

私は異なる行の100行を持っていますか?3185ミリ秒のように:サーバセッション192.168.32.9/db/data/transaction /コミットと3145ミリ秒:サーバセッション192.168.32.10/db/data/transaction/commit 2115 ms:サーバーセッション192.168.33.9/db/data/transaction/commit – Renjith

+0

@Renjith:1列目に時間値がある限り、必要な数の行を処理します。 – Inian

+0

私はあなたに質問します。私は別の行を持っている場合は、独自の行を印刷する方法はありますか?私の質問では、私はすべての行が同じ以外の時間を持っている場合、私は別の行を持っている場合、印刷する方法 – Renjith