我有以下日志文件,我只需要在此日志中打印唯一的文件。
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
我真的很感激,如果有人能建议我这个解决方案
答案 0 :(得分:2)
试试这个 -
sort -nk 1 file.txt | tail -1
根据第一列进行排序并选取最后一行(这是最有时间的一行)。
答案 1 :(得分:1)
使用awk
使用sort
,uniq
这样的简单解决方案似乎是过度杀戮。
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
答案 2 :(得分:0)
尝试uniq
-s
选项:
uniq -s 5 file
答案 3 :(得分:0)
如果要为每个ip打印具有最高第一个字段的记录(ms之前的数字),请使用:
$ 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
}
我用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