Chinaunix

标题: 截取网址 [打印本页]

作者: 方兆国儿    时间: 2016-12-02 16:01
标题: 截取网址
本帖最后由 方兆国儿 于 2016-12-10 10:37 编辑

文本内容如下,约近9000多行,统计后发现格式只有下面这几种:
截取后格式为:.chinaunix.net
保留两个点及之间内容   

目前我的做法是:
  1. 插入代码好几次都没有保存上?CU又怎么了?
复制代码

复制代码
  1. cat a.txt |sort |uniq|egrep -i 'get|post|connect'|cut -d'"' -f2|cut -d' ' -f2|sort|uniq>out.txt
  2. cat out.txt|grep -i '^http'>http.txt
  3. cat out.txt|grep -iv '^http'>nohttp.txt


  4. cat http.txt|cut -d'/' -f3|sort|uniq|awk -F'.' '{print "."$(NF-1)"."$NF}'|sort|uniq>out1.txt
  5. cat nohttp.txt|cut -d':' -f1|awk -F'.' '{print "."$(NF-1)"."$NF}'>out2.txt

  6. cat out1.txt out2.txt >ooxx.txt
  7. cat ooxx.txt|sort|uniq>result.txt
复制代码


我觉得自己写的代码太傻了,请高人指点迷津,能否用sed 直接匹配截取出来,感激涕零!

详情见36楼:http://bbs.chinaunix.net/thread-4256923-4-1.html
最终结果:如下。
  1. #cat domainExtraction.awk
复制代码
  1. #!/usr/bin/awk -f
  2. # Run as gawk
  3. # ./domainExtraction.awk inputFiles
  4. #
  5. BEGIN {
  6.     FS="";
  7.     print "START";
  8. }
  9. {
  10.     match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a);
  11.     if(!b[a[3]]++){
  12.         print a[3];
  13.     }
  14. }
  15. END {
  16.     print "DONE";
  17. }
复制代码



在此,一并感谢下列CUer的帮助与鼓励,排名不分先后:
回复 4# yinyuemi
回复 5# moperyblue
回复 6# sunzhiguolu
回复 56# sditmaner
回复 2# 王楠w_n



于是,我现在陷入艰难的抉择中,究竟选择谁为最终答案?
回复 62# moperyblue
给出了awk的解决方案,而且花费自己的时间和耐心;

回复 64# sunzhiguolu
给出了perl的解决方案,同时帮助我重新认识了regex,意义重大。

选择这个答案之前,我得到了如下回复:


最后,再次感谢大家的帮助。



作者: moperyblue    时间: 2016-12-02 16:01

  1. awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt
复制代码

?
作者: 王楠w_n    时间: 2016-12-05 10:12
楼主问题比较急,大家帮忙解决下,多谢
作者: yinyuemi    时间: 2016-12-05 10:30
输出是什么?
作者: yinyuemi    时间: 2016-12-05 10:40
回复 1# 方兆国儿

  1. awk 'match($0,/.*"(GET|POST|CONNECT) ([^ ]+)/,a){match(a[2],/.*(\.[^.]+\.(net|com))/,b);if(!c[b[1]]++)print b[1]}' file
复制代码


作者: moperyblue    时间: 2016-12-05 11:10

  1. awk '$(NF-2)~/get|post|connect/{match($(NF-1),/(http:\/\/)?[^/]*((\.[^/]*){2})[/:].*/,a)}!b[a[2]]++{print a[2]}' IGNORECASE=1 a.txt
复制代码

作者: sunzhiguolu    时间: 2016-12-05 12:20
  1. perl -ne '{$h{"$1\n"}++ if(/((?>\.\w+){2})(?=:|\/)/)}END{print keys %h}' f
复制代码

作者: sunzhiguolu    时间: 2016-12-05 12:30
  1. grep -Po '(\.\w+){2}(?=:|\/)' f|sort -u
复制代码

作者: 方兆国儿    时间: 2016-12-05 21:55
本帖最后由 方兆国儿 于 2016-12-05 22:19 编辑

回复 4# yinyuemi

首先,感谢您的回复。
然后,执行后结果存在问题。


第一:只抓 .net .com 是不可以的,因为包括了全球所有domain
第二:如图中问题,因为并非是每一行只有3个点,有的是4个、5个、6个也有的,甚至更多
第三:是我自己的问题,强调一下要用gawk


最后,多谢了。
截图出处,附件148页: Effective_awk_Programming_3rd.pdf (3.33 MB, 下载次数: 31)
btw,if(!c[b[1]]++)  仁兄能否解释一下,不太明白。




作者: 方兆国儿    时间: 2016-12-05 22:07
回复 5# moperyblue

同时,也感谢您的回复。
测试结果显示,
数据存在缺漏(计算结果显示,与我计算的相差80多行)及错误(比如空行)
缺漏:看到您仅仅匹配http,以至于丢掉了非http开头的domain,以至于此。

最后,多谢您的指教。

作者: 方兆国儿    时间: 2016-12-05 22:11
回复 6# sunzhiguolu

亦要感谢您的回复。测试结果显示,数据存在缺漏(与我计算的相差90多行)

但是,由于在下对perl 深感疲惫,已彻底弃坑了。
因此,不对perl代码作出评价。

最后,多谢您了。

作者: 方兆国儿    时间: 2016-12-05 22:13
回复 2# 王楠w_n

当然,也不能忘记美女管理员 王楠w_n  ,感谢您的帮助。
作者: sunzhiguolu    时间: 2016-12-05 23:29
本帖最后由 sunzhiguolu 于 2016-12-05 23:38 编辑

回复 10# 方兆国儿
亦要感谢您的回复。测试结果显示,数据存在缺漏(与我计算的相差90多行)

之所以如你所说处理的结果存在偏差, 我感觉与你提供的示例数据不完整有一定的关系吧. 在你提供的示例数据中结果是没有问题的, 谁又能保证编写的代码没有一点缺陷?
那个人只能是你自己, 因为只有你自己了解待处理的文档. 大家给你回帖其实就是给你提供一个不同于你自己的一个解决思路而已, 最终解决问题的那个人最后不还是你自己吗.
语言本身我感觉没有什么好赖之分, 关键还是看编写代码的那个人吧.



作者: yinyuemi    时间: 2016-12-06 08:30
回复 8# 方兆国儿

多给一些例子,比如一行多个site的,还有格式比较特殊的另外,我用的是gawk,如果你能看懂代码的意思的话,可以进一步修改一下

作者: moperyblue    时间: 2016-12-06 09:13
本帖最后由 moperyblue 于 2016-12-06 09:14 编辑

回复 9# 方兆国儿


多出的80多行对应的数据分别有什么特点?希望如何取值?
作者: 方兆国儿    时间: 2016-12-06 09:42
回复 12# sunzhiguolu

数据是不完整,但是数据类型是完整的,经过我的统计,格式只有这几种。
btw,感谢您的批评指正。

作者: 方兆国儿    时间: 2016-12-06 10:23
本帖最后由 方兆国儿 于 2016-12-06 12:40 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

cu.zip

1.99 KB, 下载次数: 20


作者: 方兆国儿    时间: 2016-12-06 10:43
本帖最后由 方兆国儿 于 2016-12-06 12:40 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

cu.zip

1.99 KB, 下载次数: 20


作者: moperyblue    时间: 2016-12-06 10:44
回复 16# 方兆国儿


cu.txt能提供吗? 用你自己的方法最后得到的结果又是怎样的?
作者: 方兆国儿    时间: 2016-12-06 10:44
本帖最后由 方兆国儿 于 2016-12-06 15:58 编辑
  1. 重复内容。。
复制代码

cu.zip

1.99 KB, 下载次数: 18


作者: 方兆国儿    时间: 2016-12-06 10:46
本帖最后由 方兆国儿 于 2016-12-06 12:40 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

cu.zip

1.99 KB, 下载次数: 16


作者: 方兆国儿    时间: 2016-12-06 10:47


作者: 方兆国儿    时间: 2016-12-06 10:48
本帖最后由 方兆国儿 于 2016-12-06 12:40 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

cu.zip

1.99 KB, 下载次数: 9


作者: 方兆国儿    时间: 2016-12-06 10:48
回复 18# moperyblue

每次提交都报错,提交不上去。
作者: 方兆国儿    时间: 2016-12-06 10:51
本帖最后由 方兆国儿 于 2016-12-06 12:41 编辑

内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
作者: 方兆国儿    时间: 2016-12-06 10:52
本帖最后由 方兆国儿 于 2016-12-06 12:41 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

cu.zip

1.99 KB, 下载次数: 8


作者: 方兆国儿    时间: 2016-12-06 10:59
本帖最后由 方兆国儿 于 2016-12-06 12:39 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

cu.zip

1.99 KB, 下载次数: 5


作者: 方兆国儿    时间: 2016-12-06 11:00
本帖最后由 方兆国儿 于 2016-12-06 12:39 编辑
  1. 内容是错误的,编辑的内容,和提交后的内容不一致,丢失内容!
复制代码

屏幕快照 2016-12-06 上午10.45.00.png (43.73 KB, 下载次数: 64)

屏幕快照 2016-12-06 上午10.45.00.png

作者: 方兆国儿    时间: 2016-12-06 11:01


作者: 方兆国儿    时间: 2016-12-06 11:02
本帖最后由 方兆国儿 于 2016-12-06 12:38 编辑

复制代码

oo.zip

1.99 KB, 下载次数: 14


作者: 方兆国儿    时间: 2016-12-06 11:05
本帖最后由 方兆国儿 于 2016-12-06 12:38 编辑

请删掉多余的帖子

cu.zip

1.99 KB, 下载次数: 16


作者: 方兆国儿    时间: 2016-12-06 11:06
[ 本帖最后由 方兆国儿 于 2016-12-06 12:37 编辑 ]\n\n请删除多余的帖子

cu.zip

1.99 KB, 下载次数: 16


作者: 方兆国儿    时间: 2016-12-06 11:07
换浏览器还是这样,提交代码就报错!


作者: 方兆国儿    时间: 2016-12-06 11:10
本帖最后由 方兆国儿 于 2016-12-06 12:37 编辑

  1. 请删除多余帖子
复制代码

cu.zip

1.99 KB, 下载次数: 16


作者: 方兆国儿    时间: 2016-12-06 11:10
回复 2# 王楠w_n

请帮忙处理一下,谢谢。
作者: 方兆国儿    时间: 2016-12-06 11:15
本帖最后由 方兆国儿 于 2016-12-06 14:47 编辑
  1. zip -r cu.zip cu
  2. adding: cu/ (stored 0%)
  3. adding: cu/cu.sh (deflated 57%)
  4. adding: cu/cu.txt (deflated 79%)
复制代码


cu.zip (1.99 KB, 下载次数: 19)   为方便大家,相关内容已压入附件,多谢。
大家都强调我的数据类型不完整,在此重新统计,以下文为例:
  1. cat cu.txt
  2. Dec 2 10:12:19 ooxx-term[2060]: ooxx_pool/s1 200 {Mac+OS+X/10.12.1 (16B2555) CalendarAgent/384} "CONNECT p11-caldav.icloud.com:443 HTTP/1.1"
  3. Dec 2 10:12:21 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://www.ipip.net/ HTTP/1.1"
  4. Dec 2 10:12:23 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT wx.qq.com:443 HTTP/1.1"
  5. Dec 2 10:12:25 ooxx-term[2060]: ooxx_pool/s1 200 {trustd (unknown version) CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)} "GET http://gn.symcd.com/MFYwVKADAgEAME0wSzBJMAkGBSsOAwIaBQAEFLGLCwGXUwcsdDfSnbPhjaNszlfgBBTSb%2FeW9IU%2FcjwwfSPahXibo3xafAIQa1D5LH%2BKMjI0sFeAEoCizQ%3D%3D HTTP/1.1"
  6. Dec 2 10:12:26 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT js.aq.qq.com:443 HTTP/1.1"
  7. Dec 2 10:12:26 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT res.wx.qq.com:443 HTTP/1.1"
  8. Dec 2 10:12:26 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://bbs.chinaunix.net/ HTTP/1.1"
  9. Dec 2 10:12:27 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://bbs.chinaunix.net/data/cache/style_3_common.css?HLC HTTP/1.1"
  10. Dec 2 10:12:27 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://bbs.chinaunix.net/data/cache/style_3_forum_index.css?HLC HTTP/1.1"
  11. Dec 2 10:12:27 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://bbs.chinaunix.net/static/js/common.js?HLC HTTP/1.1"
  12. Dec 2 10:12:28 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT res.wx.qq.com:443 HTTP/1.1"
  13. Dec 2 10:20:16 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT im.mukewang.com:80 HTTP/1.1"
  14. Dec 2 10:20:16 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://coding.imooc.com/static/lib/login-regist/tpl/erweima.js?v=201611280061 HTTP/1.1"
  15. Dec 2 10:20:16 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://szimg.mukewang.com/57ea56bd0001f6cb01400140-200-200.jpg HTTP/1.1"
  16. Dec 2 10:20:17 ooxx-term[2060]: ooxx_pool/s1 200 {trustd (unknown version) CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)} "GET http://ocsp.comodoca.com/MFYwVKADAgEAME0wSzBJMAkGBSsOAwIaBQAEFHrhPuigxCostCjL56YFRhlA4qHpBBSQr2o6lFoL2JDqElZz30O0Oija5wIQVY0%2F9sceAGHVl7iNuX8gzA%3D%3D HTTP/1.1"
  17. Dec 2 10:20:53 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "POST http://python.jobbole.com/wp-admin/admin-ajax.php HTTP/1.1"
  18. Dec 2 10:21:31 ooxx-term[2060]: ooxx_pool/s1 200 {trustd (unknown version) CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)} "GET http://g.symcd.com/MEkwR6ADAgEAMEAwPjA8MAkGBSsOAwIaBQAEFLG0OReQFreXeVAR8WC51KI82%2B3uBBQA%2BSrDQZG2ycK4PlXywJcRE6AHIAIDAjp3 HTTP/1.1"
  19. Dec 2 10:12:31 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://cu.img168.net/static/image/common/tubiao/common_283_icon.png HTTP/1.1"
  20. Dec 2 10:12:31 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://cu.img168.net/static/image/common//logo.gif HTTP/1.1"
  21. Dec 2 10:12:31 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://cu.img168.net/static/image/common/tubiao/common_233_icon.png HTTP/1.1"
  22. Dec 2 10:12:31 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://bbs.chinaunix.net/data/attachment/common/icon/clearcase.gif HTTP/1.1"
  23. Dec 2 10:14:00 ooxx-term[2060]: ooxx_pool/s1 200 {trustd (unknown version) CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)} "GET http://ocsp.int-x3.letsencrypt.org/MFgwVqADAgEAME8wTTBLMAkGBSsOAwIaBQAEFH7maudymrP8%2BKIgZGwWoS1gcQhdBBSoSmpjBH3duubRObemRWXv86jsoQISA5qXFMT5ISpagmnHsXfXtpIF HTTP/1.1"
  24. Dec 2 10:16:56 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET http://www.wooyun.org/favicon.ico HTTP/1.1"
  25. Dec 2 10:17:46 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT dn-linuxcn.qbox.me:443 HTTP/1.1"
  26. Dec 2 10:19:05 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT www.bell.ca:443 HTTP/1.1"
  27. Dec 2 10:19:15 ooxx-term[2060]: ooxx_pool/s1 200 {trustd (unknown version) CFNetwork/807.1.3 Darwin/16.1.0 (x86_64)} "GET http://support.typora.io//MEcwRaADAgEAMD4wPDA6MAkGBSsOAwIaBQAEFB0jb44GS5cf3d%2BhFSPhruUCvisbBBQ6moUHEGcotu%2F2vQVBbiDBlNoP3gIBBw%3D%3D HTTP/1.1"
  28. Dec 2 10:23:53 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Int el Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "GET https://www.iperf.fr/recv/gs.gif?gsver=3.4.0.4&gscmd=hb&gssrvid=GWD-000673&gsuid=80 6453484s4rbw17&gssid=80645348ochre617&pvid=806453487gf4rf17&gsltime=1480674232289&gstmzone=8&rd =4r45p&pld=84&gsst=0&gswh=734 HTTP/1.1"
复制代码


如下是我的输出结果:
  1. cat cu.sh
  2. #!/bin/sh
  3. #
  4. cat cu.txt |sort |uniq|egrep -i 'get|post|connect'|cut -d'"' -f2|cut -d' ' -f2|sort|uniq>out.txt

  5. cat out.txt|grep -i '^http'>http.txt
  6. cat out.txt|grep -iv '^http'>nohttp.txt

  7. cat http.txt|cut -d'/' -f3|sort|uniq|awk -F'.' '{print "."$(NF-1)"."$NF}'|sort|uniq>out1.txt
  8. cat nohttp.txt|cut -d':' -f1|awk -F'.' '{print "."$(NF-1)"."$NF}'>out2.txt

  9. cat out1.txt out2.txt >ooxx.txt
  10. cat ooxx.txt|sort|uniq>result.txt
  11. rm ./out.txt
  12. rm ./http.txt
  13. rm ./nohttp.txt
  14. rm ./out1.txt
  15. rm ./out2.txt
  16. rm ./ooxx.txt
复制代码
  1. sh cu.sh

  2. wc -l result.txt
  3. 16 result.txt

  4. more result.txt
  5. .bell.ca
  6. .chinaunix.net
  7. .comodoca.com
  8. .icloud.com
  9. .img168.net
  10. .imooc.com
  11. .iperf.fr
  12. .ipip.net
  13. .jobbole.com
  14. .letsencrypt.org
  15. .mukewang.com
  16. .qbox.me
  17. .qq.com
  18. .symcd.com
  19. .typora.io
  20. .wooyun.org
复制代码




回复 13# yinyuemi
  1. awk 'match($0,/.*"(GET|POST|CONNECT) ([^ ]+)/,a){match(a[2],/.*(\.[^.]+\.(net|com))/,b);if(!c[b[1]]++)print b[1]}' cu.txt
  2. .icloud.com
  3. .ipip.net
  4. .qq.com
  5. .symcd.com
  6. .chinaunix.net
  7. .mukewang.com
  8. .imooc.com
  9. .comodoca.com
  10. .jobbole.com
  11. .img168.net
复制代码

  1. awk 'match($0,/.*"(GET|POST|CONNECT) ([^ ]+)/,a){match(a[2],/.*(\.[^.]+\.(net|com))/,b);if(!c[b[1]]++)print b[1]}' cu.txt|wc -l
  2. 11
复制代码


回复 5# moperyblue
  1. awk '$(NF-2)~/get|post|connect/{match($(NF-1),/(http:\/\/)?[^/]*((\.[^/]*){2})[/:].*/,a)}!b[a[2]]++{print a[2]}' IGNORECASE=1 cu.txt
  2. .icloud.com
  3. .ipip.net
  4. .qq.com
  5. .symcd.com
  6. .chinaunix.net
  7. .mukewang.com
  8. .imooc.com
  9. .comodoca.com
  10. .jobbole.com
  11. .img168.net
  12. .letsencrypt.org
  13. .wooyun.org
  14. .qbox.me
  15. .bell.ca
  16. .typora.io
复制代码
  1. awk '$(NF-2)~/get|post|connect/{match($(NF-1),/(http:\/\/)?[^/]*((\.[^/]*){2})[/:].*/,a)}!b[a[2]]++{print a[2]}' IGNORECASE=1 cu.txt|wc -l
  2. 15
复制代码

回复 6# sunzhiguolu




  1. perl -ne '{$h{"$1\n"}++ if(/((?>\.\w+){2})(?=:|\/)/)}END{print keys %h}' cu.txt
  2. .qbox.me
  3. .mukewang.com
  4. .typora.io
  5. .iperf.fr
  6. .ipip.net
  7. .symcd.com
  8. .wooyun.org
  9. .imooc.com
  10. .jobbole.com
  11. .img168.net
  12. .qq.com
  13. .bell.ca
  14. .comodoca.com
  15. .letsencrypt.org
  16. .icloud.com
  17. .chinaunix.net
复制代码
  1. perl -ne '{$h{"$1\n"}++ if(/((?>\.\w+){2})(?=:|\/)/)}END{print keys %h}' cu.txt|wc -l
  2. 16

  3. 您的结果准确无误,唯在下不才,用不起perl而已,非是对语言有偏见,此事需讲明。对仁兄的宽广胸襟,在下深感敬佩,如有失礼之处,忘您勿怪责个。
复制代码




作者: sunzhiguolu    时间: 2016-12-06 11:16
本帖最后由 sunzhiguolu 于 2016-12-06 12:27 编辑

回复 21# 方兆国儿












作者: yinyuemi    时间: 2016-12-06 11:24
方兆国儿 发表于 2016-12-05 22:11
回复 6# sunzhiguolu

亦要感谢您的回复。测试结果显示,数据存在缺漏(与我计算的相差90多行)

为了awk,手足都放弃了

作者: 方兆国儿    时间: 2016-12-06 11:30
本帖最后由 方兆国儿 于 2016-12-06 15:31 编辑
  1. 重复内容。。请删除
复制代码

cu.zip

1.99 KB, 下载次数: 13


作者: 方兆国儿    时间: 2016-12-06 12:44
提交审核也就算了,编辑也审核,CU 真得变了。审核通过了,内容还是错的。
回复 2# 王楠w_n

作者: yinyuemi    时间: 2016-12-06 12:51
回复 1# 方兆国儿

  1. awk 'match($0,/.*"(GET|POST|CONNECT) ([^ ]+)/,a){match(a[2],/([^/][^/.]+\.[^/.]+)[/:]/,b);if(!c[b[1]]++)print b[1]}' cu.txt
  2. .icloud.com
  3. .ipip.net
  4. .qq.com
  5. .symcd.com
  6. .chinaunix.net
  7. .mukewang.com
  8. .imooc.com
  9. .comodoca.com
  10. .jobbole.com
  11. .img168.net
  12. .letsencrypt.org
  13. .wooyun.org
  14. .qbox.me
  15. .bell.ca
  16. .typora.io
  17. .iperf.fr

复制代码


作者: 方兆国儿    时间: 2016-12-06 13:04
回复 40# yinyuemi

烦请仁兄讲解,不太理解此处if(!c[b[1]]++)  多谢。

作者: yinyuemi    时间: 2016-12-06 13:15
方兆国儿 发表于 2016-12-06 13:04
回复 40# yinyuemi

烦请仁兄讲解,不太理解此处if(!c]++)  多谢。



awk 去重复的用法
http://bbs.chinaunix.net/thread-2309494-1-1.html

作者: 方兆国儿    时间: 2016-12-06 14:16
回复 42# yinyuemi

看了仁兄对去重复的解释,有点绕。
小弟不才,也来解释一下,如有不周之初,请斧正,多谢。

AWK去重复原理:

第一:awk的基本命令格式 awk 'pattern{action}' 省略action时,默认action是{print}

第二:pattern 条件为真时,执行 {action}。

第三:例如,!array[input]++
首先,new 一个数组,此时arrary为假
然后,给arrary赋值,此时arrary为真
最后,取反

结果,当input被赋值后,再次被读入时,arrary返回真;取反后,返回假,action不执行。


btw,请教仁兄
() [/:]
此两部分的关系,是否后者作为备选方案进行匹配?
处理此文件之初,我便思考能否同时以双FS 进行同时处理,想必是不支持双FS吧?

match(a[2],/([^/][^/.]+\.[^/.]+)[/:]/,b)

作者: 方兆国儿    时间: 2016-12-06 14:16
回复 40# yinyuemi

回复 42# yinyuemi

看了仁兄对去重复的解释,有点绕。
小弟不才,也来解释一下,如有不周之初,请斧正,多谢。

AWK去重复原理:

第一:awk的基本命令格式 awk 'pattern{action}' 省略action时,默认action是{print}

第二:pattern 条件为真时,执行 {action}。

第三:例如,!array[input]++
首先,new 一个数组,此时arrary为假
然后,给arrary赋值,此时arrary为真
最后,取反

结果,当input被赋值后,再次被读入时,arrary返回真;取反后,返回假,action不执行。


btw,请教仁兄
() [/:]
此两部分的关系,是否后者作为备选方案进行匹配?
处理此文件之初,我便思考能否同时以双FS 进行同时处理,想必是不支持双FS吧?

match(a[2],/([^/][^/.]+\.[^/.]+)[/:]/,b)
作者: 方兆国儿    时间: 2016-12-06 15:02
回复 45# moperyblue

awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt
.icloud.com
.ipip.net
.qq.com
.symcd.com
.chinaunix.net
.mukewang.com
.imooc.com
.comodoca.com
.jobbole.com
.img168.net
.letsencrypt.org
.wooyun.org
.qbox.me
.bell.ca
.typora.io
.iperf.fr

看了仁兄的代码,思路清晰,非常感谢。

作者: 方兆国儿    时间: 2016-12-06 15:02
回复 45# moperyblue

awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt
.icloud.com
.ipip.net
.qq.com
.symcd.com
.chinaunix.net
.mukewang.com
.imooc.com
.comodoca.com
.jobbole.com
.img168.net
.letsencrypt.org
.wooyun.org
.qbox.me
.bell.ca
.typora.io
.iperf.fr

看了仁兄的代码,思路清晰,非常感谢。


作者: 方兆国儿    时间: 2016-12-06 15:03
回复 45# moperyblue

  1. <div> awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt</div><div>.icloud.com</div><div>.ipip.net</div><div>.qq.com</div><div>.symcd.com</div><div>.chinaunix.net</div><div>.mukewang.com</div><div>.imooc.com</div><div>.comodoca.com</div><div>.jobbole.com</div><div>.img168.net</div><div>.letsencrypt.org</div><div>.wooyun.org</div><div>.qbox.me</div><div>.bell.ca</div><div>.typora.io</div><div>.iperf.fr</div>
复制代码



看了仁兄的代码,思路清晰,非常感谢。

作者: yinyuemi    时间: 2016-12-06 15:06
回复 44# 方兆国儿

1. “ () [/:]
此两部分的关系,是否后者作为备选方案进行匹配?
处理此文件之初,我便思考能否同时以双FS 进行同时处理,想必是不支持双FS吧?、


不是很清楚,你说的双FS想达到什么样的效果?
如果你想把FS设成两种分割符的话,用正则的或(|)就行,比分FS='(XXX|YYY)'


2. 关于去重复的语句,你好像没有理解对


AWK去重复原理:

第一:awk的基本命令格式 awk 'pattern{action}' 省略action时,默认action是{print}

第二:pattern 条件为真时,执行 {action}。

第三:例如,!array[input]++
首先,new 一个数组,此时arrary为假
然后,给arrary赋值,此时arrary为真
最后,取反

结果,当input被赋值后,再次被读入时,arrary返回真;取反后,返回假,action不执行。



取反符的优先级高于++, 所以是先对array[input]取反,为真. 后对其赋值,记为1.



作者: 方兆国儿    时间: 2016-12-06 15:19
本帖最后由 方兆国儿 于 2016-12-06 15:48 编辑

回复 49# yinyuemi

抱歉,仁兄,该是您理解存在误差。

https://www.gnu.org/software/gawk/manual/html_node/Precedence.html
取反后为真, action将会执行,没必要继续赋值了。



作者: 方兆国儿    时间: 2016-12-06 15:39
本帖最后由 方兆国儿 于 2016-12-06 15:48 编辑

回复 49# yinyuemi

抱歉,仁兄,该是您理解存在误差。

https://www.gnu.org/software/gawk/manual/html_node/Precedence.html
取反后为真, action将会执行,没必要继续赋值了。


作者: 方兆国儿    时间: 2016-12-06 15:49
本帖最后由 方兆国儿 于 2016-12-06 15:53 编辑

回复 2# 王楠w_n

帮忙通过审核吧,谢谢。


作者: 方兆国儿    时间: 2016-12-09 14:06
回复 45# moperyblue

awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt


烦请仁兄讲解一下  ((\.[^/:]*){2})/,a)
此段代码,我的理解是:匹配以点开头接着包含非 / 或 : 的字符 ,如此之匹配前2组;
所以,结合例子来说,我认为如下内容
Dec  2 10:12:26 ooxx-term[2060]: ooxx_pool/s1 200 {Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36} "CONNECT js.aq.qq.com:443 HTTP/1.1"


匹配到的结果应该是:
.aq.qq

但,实际结果确是:
.qq.com
请教仁兄,这究竟是怎么回事?多谢。

作者: moperyblue    时间: 2016-12-09 14:25
回复 53# 方兆国儿


你自己的脚本执行后不也是输出.qq.com吗?  这种算符合要求吗?
作者: moperyblue    时间: 2016-12-09 15:09

awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt

红色部分的正则会一直取到后面HTTP("/"之前)为止,  但中间最后这组.qq.com符合条件所以会被保留下来
作者: sditmaner    时间: 2016-12-09 16:13
grep -Po '
作者: 方兆国儿    时间: 2016-12-09 16:15
回复 55# moperyblue

您的代码没有任何问题!

就是这里不明白呀,我的理解是应该匹配 头两个点及之间字符 ,可您说的也很清楚匹配最后两个点?请问这是怎么样的过程呢?



作者: 方兆国儿    时间: 2016-12-09 16:26
本帖最后由 方兆国儿 于 2016-12-09 16:31 编辑

回复 55# moperyblue

我试着理解您的意思
红色部分匹配到 /之后,作为取到的内容再去给 a[3] 做处理 。顺序执行匹配模式,你看我理解的对吗?
接着,a[3] 部分匹配的时候,
假设为:aa.bb.cc.com
我的理解是,得到如下结果
.bb.cc
可结果却是
cc.com
请教您,帮忙讲解一下,多谢。如果说,{2} 是匹配最后两组的话,我就理解了! 真的是这样吗?

作者: 方兆国儿    时间: 2016-12-09 16:41
回复 55# moperyblue


Reference: http://www.gnu.org/software/gawk/manual/gawk.html#Regexp
所以,只是重复前面正则的匹配次数而已;可是,结果却是,仅仅匹配到了最后两组内容;请教,为什么不是,匹配到前两组,前两组为什么不符合该正则呢?实在没明白!

屏幕快照 2016-12-09 下午4.38.36.png (168.03 KB, 下载次数: 34)

屏幕快照 2016-12-09 下午4.38.36.png

作者: 方兆国儿    时间: 2016-12-09 16:43
回复 56# sditmaner

感谢解答,您能帮我解释一下吗,55
作者: sunzhiguolu    时间: 2016-12-09 17:00
回复 59# 方兆国儿
awk '{match($0,/.*"(GET|POST|CONNECT) (https?:\/\/)?[^/]*((\.[^/:]*){2})/,a)}!b[a[3]]++{print a[3]}' cu.txt

红色部分的正则会一直取到后面HTTP("/"之前)为止,  但中间最后这组.qq.com符合条件所以会被保留下来
回溯!



作者: moperyblue    时间: 2016-12-09 17:12
本帖最后由 moperyblue 于 2016-12-09 18:22 编辑

回复 59# 方兆国儿

echo ' "CONNECT js.aq.qq.com:443 HTTP/1.1                        
"CONNECT js.aq.qq.com/xxx HTTP/1.1
"CONNECT js.aq.qq.com:443 HTTP/1.1'|sed -r 's/([^/]*)/(\1)/'
( "CONNECT js.aq.qq.com:443 HTTP)/1.1
( "CONNECT js.aq.qq.com)/xxx HTTP/1.1
( "CONNECT js.aq.qq.com:443 HTTP)/1.1

echo ' "CONNECT js.aq.qq.com:443 HTTP/1.1
"CONNECT js.aq.qq.com/xxx HTTP/1.1
"CONNECT js.aq.qq.com:443 HTTP/1.1'|sed -r 's/([^/]*)((\.[^/:]*){2})/(\1)<\2>/'
( "CONNECT js.aq)<.qq.com>:443 HTTP/1.1
( "CONNECT js.aq)<.qq.com>/xxx HTTP/1.1
( "CONNECT js.aq)<.qq.com>:443 HTTP/1.1





作者: 方兆国儿    时间: 2016-12-09 17:43
回复 61# sunzhiguolu

大哥,用词太专业了啊,能通俗点说吗?拜托了!
作者: sunzhiguolu    时间: 2016-12-09 18:21
回复 63# 方兆国儿
74 楼用颜色进行了标识, 胜过前言万语呀.


作者: 方兆国儿    时间: 2016-12-09 20:06
本帖最后由 方兆国儿 于 2016-12-09 20:08 编辑

回复 61# sunzhiguolu

for now ,i know exactly what you mean, thank you very very much and that’s very kind of you

  love u

作者: 方兆国儿    时间: 2016-12-09 20:07
回复 62# moperyblue

i feel grateful that you spent so much time and patience thank you so much


作者: 方兆国儿    时间: 2016-12-09 20:11
于是,我现在陷入艰难的抉择中,究竟选择谁为最终答案?
回复 62# moperyblue
给出了awk的解决方案,而且花费自己的时间和耐心;

回复 64# sunzhiguolu
给出了perl的解决方案,同时帮助我重新认识了regex,意义重大。


作者: sunzhiguolu    时间: 2016-12-09 20:30
本帖最后由 sunzhiguolu 于 2016-12-09 22:21 编辑

回复 67# 方兆国儿
给出了awk的解决方案,而且花费自己的时间和耐心;

选择 awk 吧, 你都已经将 perl 看成衣服了还为 perl 纠结个什么劲儿啊!



作者: 方兆国儿    时间: 2016-12-09 20:48
回复 68# sunzhiguolu

真的很感激您的帮助,仁兄的人品真的没话说,大好人!
作者: 方兆国儿    时间: 2016-12-09 20:53
回复 56# sditmaner

仁兄这个option  应该是GNU grep
作者: sunzhiguolu    时间: 2016-12-09 22:20
回复 1# 方兆国儿
.... 测试结果显示,数据存在缺漏(与我计算的相差90多行)

但是,由于在下对perl 深感疲惫,已彻底弃坑了
因此,不对perl代码作出评价
首先澄清一点,我并没为您选择 awk 或是 perl 或是 sed 作为答案来进行公布。
我做的其实只是根据你的意思 替你说了出来。
另外一点,你在结贴时引用我的一个回复 似乎你老兄对于这个回复有点认真了。如果此贴有不礼貌的地方,还请您见谅 我其实也是半开玩笑的 没有其他的意思。
最后,希望你老兄将自己的 兄弟 (perl) 再找回来,有问题一起学习,一起交流,共同进步。



作者: 方兆国儿    时间: 2016-12-10 08:37
回复 71# sunzhiguolu

所以,我说您是大好人啊,仁兄?(见69楼回复)

还是回归perl;
host POSIX awk 每次跑GNU awk 都要ssh到虚拟机,连接还经常断掉;
说到底,还是perl,始终如一,男人嘛,吃回头草也无可厚非,至少说明重情重义。

仁兄,您好眼力!我就是要吃回头草了。

作者: 方兆国儿    时间: 2016-12-10 09:06
回复 71# sunzhiguolu


以前写的perl script 全部rm ,只找到一张旧照片,前段时间听说perl出了新版本,不知道现在 version

作者: moperyblue    时间: 2016-12-10 09:09

楼主 你这个需求是用在什么场景  是属于临时性任务 还是需要定时(如,每天某个时间点)执行的任务
作者: 方兆国儿    时间: 2016-12-10 09:48
回复 74# moperyblue

暂时不需要跑成routine ,当数据达到一定量级,手动跑一次;安全设备的数据,由于数据不停增长,所以,跑routine也不可能,因为数据要导出后,才能跑script。

作者: moperyblue    时间: 2016-12-10 10:06
回复 75# 方兆国儿


导出的操作能用脚本实现吗 如果可以的话 是不是可以写个脚本先判断数据量是否到达某个级别 如果到达这个级别就执行脚本(先 导出数据 然后 处理数据)
作者: 方兆国儿    时间: 2016-12-10 11:26
回复 76# moperyblue

感谢您的建议,目前看来无法实现;导出流程: 登录设备-输入条件-查询-得到结果-导出结果。
设备不支持script操作。

作者: sunzhiguolu    时间: 2016-12-15 08:55
回复 73# 方兆国儿
我用的是 Cygwin,
perl --version

This is perl 5, version 22, subversion 1 (v5.22.1) built for cygwin-thread-multi

Copyright 1987-2015, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.








欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2