免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: butterflyswim
打印 上一主题 下一主题

[文本处理] 文本内容处理 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-09-07 06:20:00程序设计版块每日发帖之星
日期:2015-09-07 06:20:00
11 [报告]
发表于 2016-09-15 21:49 |只看该作者
请参考
  1. [root@study tmp]# cat paste.awk
  2. BEGIN{
  3.     f=0
  4. }

  5. {
  6.     if(f==0){
  7.         a[1]=$1
  8.         printf $0
  9.         getline
  10.     }
  11.     if(a[1]==$1){
  12.         printf ":" $2 " " $3 " " $4 " "
  13.         a[1]=$1
  14.         f=1
  15.         next
  16.     }

  17.     printf "\n"
  18.     printf $0
  19.     a[1]=$1
  20.     f=1
  21. }

  22. END{
  23.     printf "\n"
  24. }
  25. [root@study tmp]# awk -f paste.awk 1.txt         
  26. 1.1.1.1 general/tcp GNU-Bash 1.0
  27. 2.2.2.2 general/tcp GNU-Bash 1.0:general/tcp HTTP-Brute 4.0 :53/tcp VMSA-2015-0001:-VMware-vCenter-Server,-ESXi,-Workstation 7.1 :111/tcp VMSA-2015-0007:-VMware-ESXi-OpenSLP 3.0
  28. 3.3.3.3 general/tcp GNU-Bash-Environment 5.0:80/tcp HTTP-Brute-Force 2.0
复制代码

论坛徽章:
1
2015亚冠之萨济拖拉机
日期:2015-09-04 10:29:22
12 [报告]
发表于 2016-09-16 13:17 |只看该作者
awk '{a="";for(i=2;i<=NF;i++){a=a" "$i};  if(b[$1]) {b[$1]=a";"a} else {b[$1]=a}  }END{for(i in b) print i,b[i]}' filename

论坛徽章:
0
13 [报告]
发表于 2016-09-19 11:12 |只看该作者
回复 2# moperyblue


大神能否解释下这个脚本的含义?
awk '{k=$1;$1="";a[k]=a[k]?a[k]";"$00}END{for(i in a)print i,a}'

前面的条件看不懂啊 , k=$1; 第1个字段的文本内容赋值给K ? 之后又空格赋值给$1 ?  

a[k]=a[k]?a[k]  ????

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
14 [报告]
发表于 2016-09-19 11:47 |只看该作者
回复 13# y2j16888


k => 作为临时变量保存第一个域的值.
$1="" => 清空第一个域的值,如,1.1.1.1 general/tcp GNU-Bash 1.0 这行 执行$1=""后,$0的值为" general/tcp GNU-Bash 1.0"
d=a>0?b:c 【三目运算符】<=> if(a>0){d=b}else{d=c}

论坛徽章:
0
15 [报告]
发表于 2016-09-19 15:06 |只看该作者
回复 14# moperyblue


awk '{k=$1;$1="";a[k]=a[k]?a[k]";"$00}END{for(i in a)print i,a}'

但是就是不懂你写的这个运算符是啥意思 ?  a[k]=a[k]?a[k]";"$00   ,能否解释下, 后面的$0;$0 ,是打印全部?

论坛徽章:
2
极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之新疆
日期:2017-02-06 17:31:41
16 [报告]
发表于 2016-09-19 15:50 |只看该作者
回复 15# y2j16888

a?b:c   如果a成立,就执行b,否则执行c
a[k]";"$00 第一个域和$0中间用分号隔开,否则就执行$0

不太会解释,自己慢慢体会

论坛徽章:
0
17 [报告]
发表于 2016-09-19 16:08 |只看该作者
回复 16# butterflyswim


那它不是 if a[k]成立,即不为空,则把a[k];$0 赋值给a[k],否则打印$0赋值给a[k]??

那当条件中if  a[k] 中这个的值,初始是怎么样?怎么样变化的

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
18 [报告]
发表于 2016-09-19 16:28 |只看该作者
本帖最后由 moperyblue 于 2016-09-19 16:58 编辑

回复 15# y2j16888


  1. if(a[k]){
  2.   a[k]=a[k]";"$0
  3. }else{
  4.   a[k]=$0
  5. }
复制代码


当a[k]有值就连接,否则a[k]就被赋值$0(此时$0已经少了第一个域,因为前面执行了$1="")

论坛徽章:
0
19 [报告]
发表于 2016-09-19 17:01 |只看该作者
回复 18# moperyblue


大神,这个我已经知道,我就是不知道 a[k] 中这个的值,初始是怎么样?怎么样变化的。 能否解释下,谢谢

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
20 [报告]
发表于 2016-09-19 17:21 |只看该作者
回复 19# y2j16888


a[k]初始空, 所以会执行 a[k]=$0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP