我如何按datesortingApache日志文件?

我有几个已经被附加在一起的Apache日志文件,我需要按datesorting。 它们的格式如下:

"www.company.com" 192.168.1.1 [01/Jan/2011:00:04:17 +0000] "GET /foobar/servlet/partner/search/results?catID=1158395&country=10190&id=5848716&order_by=NT&order_by_dir=-&product=10361996&siteID=1169823&state= HTTP/1.1" 200 10459 0 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" 

在Linux命令行上执行此操作的最佳方法是什么?

 #!/bin/sh if [ ! -f $1 ]; then echo "Usage: $0 " exit fi echo "Sorting $1" sort -t ' ' -k 4.9,4.12n -k 4.5,4.7M -k 4.2,4.3n -k 4.14,4.15n -k 4.17,4.18n -k 4.20,4.21n $1 > $2 

这几乎是无足轻重的指出,但以防万一它混淆了任何人:grm的答案在技术上应该使用字段#3,而不是4,以匹配提问者的确切的日志格式。 那就是,它应该是:

  sort -t ' ' -k 3.9,3.12n -k 3.5,3.7M ... 

他的答案在其他方面都是正确的,可以用于通用日志格式。

我通过在线示例了解了这一点,通过“Linux命令行”手册,手册页和反复试验来了解:

 sort -k 3.9nb -k 3.5Mb -k 3.2nb [location and name of file] 

b和n或M一起将停止从阅读无意义的字符(比如/和)中排序:当空间已经被用作分隔符时,这将使生活变得更容易,而你仍然必须用:,/和/或者在分拣时希望击杀的任何其他角色。

上面的脚本将按年份排序,然后按月份排序,然后按日期排序。 在所有b的旁边放一个r来下降。