读入并解析文本文件

时间:2015-04-25 06:51:58

标签: bash parsing sorting

我需要解析文件(txt)并按字节数显示10行查询。 (排序)我有一个文件 log.txt

164.94.76.83.cust.bluewin.ch - - [17/Oct/2006:07:56:45 -0700] "GET /example/serif.css HTTP/1.1" 200 4824 "http://www.example.org/example/When/200x/2003/07/25/NotGaming" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7"
164.94.76.83.cust.bluewin.ch - - [03/Oct/2006:07:56:45 -0700] "GET /example/example.js HTTP/1.1" 200 6685 "http://www.example.org/example/When/200x/2003/07/25/NotGaming" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7"
164.94.76.83.cust.bluewin.ch - - [06/Oct/2006:07:56:46 -0700] "GET /example/When/200x/2003/07/25/Nuke.png HTTP/1.1" 200 19757 "http://www.example.org/example/When/200x/2003/07/25/NotGaming" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7"
164.94.76.83.cust.bluewin.ch - - [15/Oct/2006:07:56:46 -0700] "GET /example/When/200x/2003/07/25/diablo.png HTTP/1.1" 200 12597 "http://www.example.org/example/When/200x/2003/07/25/NotGaming" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7"
164.94.76.83.cust.bluewin.ch - - [19/Oct/2006:07:56:46 -0700] "GET /example/When/200x/2003/07/25/-big/Nuke.jpg HTTP/1.1" 403 322 "

输出必须是(以%和链接计数 - 并排序DESC):

1. http://www.example.org/example/When/200x/2006/09/25/ - 3100 - 74%                                                    
2. http://www.example.org/example/ - 1000 - 24%                
3. http://www.example.org/example/genx/docs/Guide.html - 91 - 2%    

也就是说,有必要突出显示请求排序中最大字节数的行,并指出感兴趣的数量。

1 个答案:

答案 0 :(得分:0)

既然你坚持只使用shell的方法,那么你问的最接近的解决方案似乎是这样的:

sort -t ' ' -k 10 -r -n log.txt | head -n 10 | awk '{print $1 $7, $10}'

通过在记录请求时设置更有用的LogFormat,或者在处理日志时允许Perl或Python解析器,您可以做得更好。