如何按日期对Apache日志文件进行排序?

aag*_*gha 18 apache sorting date

我有几个已经附加在一起的Apache日志文件,我需要按日期对它们进行排序.它们采用以下格式:

"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=N-T&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)"
Run Code Online (Sandbox Code Playgroud)

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

grm*_*grm 33

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 非常好的答案,适用于Apache日志,确实是字段4,假设默认分隔符是一个空格.在排序手册页上花几分钟帮助我理解了这个命令,我有信心自己编写.也只是为任何其他读者添加,这是使用给定字段4中的字符范围,按顺序排序.-k 4.9,4.12n是年'n'表示数字排序,-k 4.5,4.7M是3个字母的月份缩写排序,M告诉它完全如此.@ offby1它确实将它显示为一个选项,但示例并不好. (3认同)

小智 9

这几乎是太微不足道指出,但只是在情况下,它混淆了人:GRM的答案应该在技术上采用现场#3,没有4,以匹配提问的确切日志格式.也就是说,它应该是:

    sort -t ' ' -k 3.9,3.12n -k 3.5,3.7M ...
Run Code Online (Sandbox Code Playgroud)

他的答案在其他方面都是正确的,并且可以按原样用于通用日志格式.