2015-02-10 45 views
1

我有日志文件是这样的:如何使用文件中的自定义日期进行排序?

Fri Jan 30 13:52:57 2015 1 10.1.1.1 0 /home/test1/MAIL_201401301353.201501301352.19721.sqlLdr b _ i r test1 ftp 0 * c 
Fri Jan 30 13:52:58 2015 1 10.1.1.1 0 /home/test2/MAIL_201401301354.201501301352.12848.sqlLdr b _ i r test2 ftp 0 * c 
Fri Jan 30 13:53:26 2015 1 10.1.1.1 0 /home/test3/MAIL_201401301352.201501301353.17772.sqlLdr b _ i r test3 ftp 0 * c 

我需要日期值进行排序。日期值是第一个2014 ....

我能找到的日期值是这样的:

echo $log | awk '{print $9}' | grep -oP '(?<!\d)201\d{9}' | head -n 1 

我如何排序这个日期值(从新到旧)?

回答

2

排序这个文件,你可以使用:

sort -t_ -nk2,2 file 
Fri Jan 30 13:53:26 2015 1 10.1.1.1 0 /home/test3/MAIL_201401301352.201501301353.17772.sqlLdr b _ i r test3 ftp 0 * c 
Fri Jan 30 13:52:57 2015 1 10.1.1.1 0 /home/test1/MAIL_201401301353.201501301352.19721.sqlLdr b _ i r test1 ftp 0 * c 
Fri Jan 30 13:52:58 2015 1 10.1.1.1 0 /home/test2/MAIL_201401301354.201501301352.12848.sqlLdr b _ i r test2 ftp 0 * c 

详情:

-n  # numerical sort 
-t  # set field separator as _ 
-k2,2 # sort on 2nd field 
+0

谢谢。这对我有用。还有一个问题,如果line还有两个_字符就像这样:'XXX_YYY_MAIL_201 ...'我该怎么办?因为我可以使用-t只是一个字符。 – phe 2015-02-10 09:11:07

+1

在这种情况下'sort -t/-k4,4 file'会更好'sort'命令。 – anubhava 2015-02-10 09:14:41

+0

'sed -e's/MAIL_2/@ 2 /'file | sort -t @ ... | sed -e's/@/MAIL_ /''(未测试) – JJoao 2015-02-10 09:18:39

相关问题