免费注册 查看新帖 |

Chinaunix

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

下班了,周末给大家出个题目做做吧 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-06 22:06 |只看该作者
awk '/[0-9]+/{a[i++]=$1}END{for(j=0;j<i;j+=2) print a[j],a[j+1]}' cfile

论坛徽章:
0
12 [报告]
发表于 2009-03-07 00:56 |只看该作者
原帖由 ly5066113 于 2009-3-6 18:09 发表
awk '!/^[[:blank:]]*$/&&!a[$1]++{if(++i%2==0) print " "$1;else printf $1}END{if(i%2==1) print ""}' urfile



TIM大哥

awk '!/^[[:blank:]]*$/&&!a[$1]++{if(++i%2==0) print " "$1;else printf $1}END{if(i%2==1) print ""}' urfile、、

红色部分如何理解,能否讲解一下,多谢!

论坛徽章:
0
13 [报告]
发表于 2009-03-07 07:59 |只看该作者
原帖由 linuxboy823 于 2009-3-7 00:56 发表



TIM大哥

awk '!/^[[:blank:]]*$/&&!a[$1]++{if(++i%2==0) print " "$1;else printf $1}END{if(i%2==1) print ""}' urfile、、

红色部分如何理解,能否讲解一下,多谢!

给你全例子吧,假如文件如下:
[test@ ~ ]$ cat 1
11

12

11



13
14
11

15


16
16

12
那么使用!a[$1]++得到的结果如下
[test@ ~ ]$ awk '!a[$1]++' 1
11

12
13
14
15
16

论坛徽章:
0
14 [报告]
发表于 2009-03-07 11:50 |只看该作者
原帖由 oldoger 于 2009-3-7 07:59 发表

给你全例子吧,假如文件如下:
[test@ ~ ]$ cat 1
11

12

11



13
14
11

15


16
16

12
那么使用!a[$1]++得到的结果如下
[test@ ~ ]$ awk '!a[$1]++' 1
11

12
13
14
15
16



那这个!是什么意思呢?!不是非的意思嘛?

论坛徽章:
0
15 [报告]
发表于 2009-03-07 11:58 |只看该作者
[root@localhost test]# cat b.txt
11
12
11

13
14
11
15

16
16
12
awk 'BEGIN{num=1}$0!~/^$/{if(!a[$1]){b[num]=$1;num++;a[$1]=1}}END{for(s=1;s<=num;s+=2)print b" "b[s+1]}' b.txt

呵呵 我也贴个,就是长了点

[ 本帖最后由 yingweixu 于 2009-3-7 12:08 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2009-03-07 12:24 |只看该作者

回复 #14 linuxboy823 的帖子

是表示非的意思,默认值为空或者0的时候不打印,其他值刚打印

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
17 [报告]
发表于 2009-03-07 12:27 |只看该作者
弄个sed的:
  1. sed -r ':m;N;$!bm;${s/^\W+//;:n;s/((\<\w*\>).*)\<\2\>/\1/;tn;s/\W+/ /g;s/\<(\w+\> \<\w+)\> /\1\n/g;s/\W$//}' urfile
复制代码

  1. sed ':m;N;$!bm;${s/^\W\+//;:n;s/\(\(\<\w*\>\).*\)\<\2\>/\1/;tn;s/\W\+/ /g;s/\<\(\w\+\> \<\w\+\)\> /\1\n/g;s/\W$//}' urfile
复制代码


根据Tim的思路作了优化:
  1. sed -r ':n;$!{N;s/^\W+//;s/((\<\w*\>).*)\<\2\>/\1/;bn};s/\W+/ /g;s/\<(\w+\> \<\w+)\> /\1\n/g;s/\W$//' urfile
复制代码

  1. sed ':n;$!{N;s/^\W\+//;s/\(\(\<\w*\>\).*\)\<\2\>/\1/;bn};s/\W\+/ /g;s/\<\(\w\+\> \<\w\+\)\> /\1\n/g;s/\W$//' urfile
复制代码

[ 本帖最后由 blackold 于 2009-3-9 12:04 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2009-03-08 16:01 |只看该作者
看了回复,大家真是神速!
也贴下我自己的答案吧:
awk '!a[$1]++&&NF{a[++i]=$1;if(i%2==0)print $1;else printf $1" "}END{if(i%2!=0)print " "}' file

论坛徽章:
0
19 [报告]
发表于 2009-03-09 00:34 |只看该作者

回复 #2 ly5066113 的帖子

大哥,你的[:blank:]是什么意思啊

论坛徽章:
0
20 [报告]
发表于 2009-03-09 07:00 |只看该作者

回复 #19 amwfnhz 的帖子

空格啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP