如何按名称排序?

中国的膳宿条件

我有记录。记录具有以下格式:

<client host> - - [<timestamp with timezone>] <HTTP-request line (type, URL, version)> <Code of HTTP-response> <Number of sent bytes or '-', if the response is empty> <Referer string ('-'  means direct request without referer)> <Client info (browser, application)>

例如这 5 行:

20158147070.user.veloxzone.com.br - - [29/Oct/2006:06:59:18 -0700] "GET /example/.comments 
HTTP/1.1" 404 293 "http://www.example.org/example/" "Mozilla/4.0 (compatible; MSIE 6.0; 
Windows NT 5.1; SV1)"
20158147070.user.veloxzone.com.br - - [29/Oct/2006:06:59:18 -0700] "GET /example/.comments 
HTTP/1.1" 404 293 "http://www.example.org/example/" "Mozilla/4.0 (compatible; MSIE 6.0; 
Windows NT 5.1; SV1)"
adorno.ub.uni-duesseldorf.de - - [10/Oct/2006:06:59:37 -0700] "GET /example/.comments 
HTTP/1.0" 404 281 "-" "Mozilla/5.0 (Windows; U; WinNT4.0; de-DE; rv:1.0.2) Gecko/20030208 
Netscape/7.02"
nat240.ariba.com - - [29/Oct/2006:07:40:47 -0700] "GET //example/example.atom' HTTP/1.1" 304 
298 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 
Thunderbird/1.5.0.7"
nat240.ariba.com - - [31/Oct/2006:07:10:47 -0700] "GET /example/example.atom' HTTP/1.1" 304 
297 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 
Thunderbird/1.5.0.7"

无论行的其余部分如何,我都需要按 url 名称对其进行排序。

我使用 awk 来查找 404 错误,现在我需要排序

cat log.txt | gawk '$9=="404"' | gawk '{print $7 , $9}' |  uniq -c | sort -r

但我有这个:

2 /example/.comments 404
1 /example/.comments 404

我需要这样:

3 /example/.comments 404

.....

1. /example/.comments - 28 - 32.2%
2. /example/example.atom.xml - 9 - 10.3%
3. /example/When/200x/2003/04/10/-big/Concorde.jpg - 8 - 9.2%
4. /example/When/200x/2006/03/30/-big/IMG_4613.jpg - 7 - 8.0%
5. /example/When/200x/2003/07/25/-big/guild-2.jpg - 6 - 6.9%
6. /example/Patti-Smith.png - 5 - 5.7%
7. /example/IMGP4289-2.png - 5 - 5.7%
8. /example/IMGP4287.png - 5 - 5.7%
9. /example/Image-Search-Mystery.png - 5 - 5.7%
10. /example/Horses.png - 5 - 5.7%
11. /example/When/200x/2004/02/27/-big/Unreal.png - 4 - 4.6%

格式为:列表或计数器,后跟名称 url,然后是它们的唯一编号,然后是它们在所有 404 错误中的百分比。

艾伦

sort在使用uniq命令之前,您应该始终使用uniq工作方式是,它只计算重复项,如果它们一个接一个地排列,如果在一些不同的行之后有几行相同的行,则该行不会被计入以前的重复项。

您应该始终使用sort管道来uniq -c获取相同行的确切计数。

此外,由于第一列将是您应该使用的计数数量,sort -n如果您希望它们按出现次数排序。

您还可以删除第一个 cat 并直接对文件执行 awk 而不是cat输出。

你应该使用这样的东西:

gawk '$9=="404"' log.txt | gawk '{print $7 , $9}' |  sort | uniq -c | sort -n

sort -k如果您不想按计数排序,也可以使用按第二列排序。

gawk '$9=="404"' log.txt | gawk '{print $7 , $9}' |  sort | uniq -c | sort -k 2

如果您不需要计算行数,您可以使用 sort -u 来获取唯一的行,并且您可以将两个 awk 管道合二为一。

gawk '$9=="404" {print $7 , $9}' log.txt | sort -u

如果您想按出现次数排序并在一个命令中计算所有 404,您需要在 awk 中使用以下内容执行所有操作:

gawk '{PROCINFO["sorted_in"] = "@val_num_asc"} $9=="404" {count_url[$7]++} {count_404[$9]++} END {for(url in count_url) print count_url[url],url;print "number of 404 errors: "count_404[404];}' log.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章