【问题标题】:Read in and parse textfile读入并解析文本文件
【发布时间】:2015-04-25 06:51:58
【问题描述】:

我需要解析文件(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%    

即需要高亮显示请求排序中最大字节数的行,并注明感兴趣的数量。

【问题讨论】:

  • @OP- 我猜您希望以逐行顺序正确对齐输出!
  • 你有没有尝试过?我可以帮助你,但如果你已经写了一些脚本会有所帮助。
  • 查看更多我创建但我不知道的内容 - stackoverflow.com/questions/29850406/…
  • 哇,读的真长!在您最初的 cmets 某处,您说:“最初的任务:我需要解析文件并按字节数显示 10 行查询。”我认为有比您迄今为止尝试的更简单的方法。今天我会尝试想出一个更好的方法。
  • 是的,我编写了 sh 脚本,但我知道这不是最简单的方法。有一些简单的方法。

标签: bash parsing sorting


【解决方案1】:

由于您坚持仅使用 shell 方法,因此与您所要求的最接近的解决方案似乎是这样的:

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

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

【讨论】:

  • 哇!我一直在写脚本,这一切都在一条线上。以百分比的形式告诉我更多信息?
  • 如您所知,上面的行非常脆弱。不要将它用于任何系列,它可能会以无数种方式破坏。至于百分比,不清楚你想要什么。百分比来自什么?什么应该是 100%?
  • 对不起,我的英语不好。百分比:为它们中的每一个下载的字节数占为处理这些引荐来源而下载的总字节数的百分比
  • 排序 -t ' ' -k 10 -r -n log.txt |头-n 10 | awk '{print NR". " $11 " - " $10}'
  • 只保留上面写的兴趣是必要的。非常感谢好心人的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多