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

wfveoks0  于 2022-11-16  发布在  Apache
关注(0)|答案(5)|浏览(155)

我有几个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)"

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

pvcm50d1

pvcm50d11#

#!/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
t40tm48m

t40tm48m2#

这几乎是微不足道的指出,但 * 只是 * 以防它混淆任何人:从技术上讲,grm的答案应该使用字段#3,而不是4,以匹配提问者的确切日志格式。也就是说,它应该是:

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

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

0pizxfdo

0pizxfdo3#

当日志行可能包含多个IP地址(由,'分隔)时,使用' '作为字段分隔符失败
尝试使用

sort -t '[' -k 2.8,2.11n -k 2.4,2.6M -k 2.1,2.2n -k 2.13,2.14n -k 2.16,2.17n -k 2.19,2.20n
pkmbmrz7

pkmbmrz74#

尝试Super Speedy Syslog Searcher
(假设您有rust installed

cargo install super_speedy_syslog_searcher

然后

s4 /var/log/apache2
ebdffaop

ebdffaop5#

我通过浏览“Linux命令行”这本书、手册页和试错法,从在线示例中了解到了这一点:

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

B与n或M沿着将停止排序阅读没有意义的字符,例如/和:这使得当空格已经被用作分隔符而您仍然必须用:、/和/或任何其他您希望在排序时使用的字符来分隔时的工作更加容易。
上面的脚本将首先按年排序,然后按月排序,最后按日期排序。

相关问题