免费注册 查看新帖 |

Chinaunix

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

请教个文本处理问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-05 22:07 |只看该作者
傻了   

论坛徽章:
0
12 [报告]
发表于 2009-03-05 22:35 |只看该作者
  1. [root@Mylinux tmp]# awk -F "&" '{for(i=2;i<=NF;i++)a[substr($i,1,1)]=substr($i,3);for(j=1;j<=5;j++){if(!a[j])a[j]=0;printf a[j]"\t"}print "";delete a}' file   
  2. 99      100     0       0       0
  3. 100     0       111     0       0
  4. 99      1       111     0       0
  5. 99      0       111     110     0
  6. 99      111     66      100     44
复制代码

  1. [root@Mylinux tmp]# awk -F "&" '{for (i=2;i<=NF;i++)a[substr($i,1,1)]=substr($i,3);printf $1"\t";for(j=1;j<=5;j++){if(!a[j])a[j]=0;printf a[j]"\t"}print "";delete a}' file1  
  2. 172.27.38.0     99      100     0       0       0
  3. 192.168.9.2     100     0       111     0       0
  4. 202.96.64.68    99      1       111     0       0
  5. 202.96.69.38    99      0       111     110     0
  6. 202.77.88.99    99      111     66      100     44
复制代码

[ 本帖最后由 ywlscpl 于 2009-3-5 22:43 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
13 [报告]
发表于 2009-03-06 09:12 |只看该作者
呵呵,都用awk,写个sed的:

sed -r 's/&/\n1\n2\n3\n4\n5&/;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;ta;s/\n.\b/\t0/g' urfile

[ 本帖最后由 ly5066113 于 2009-3-6 09:13 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-03-06 10:03 |只看该作者
原帖由 ly5066113 于 2009-3-6 09:12 发表
呵呵,都用awk,写个sed的:

sed -r 's/&/\n1\n2\n3\n4\n5&/;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;ta;s/\n.\b/\t0/g' urfile

能解释一下吗,我接触linux时间不长,看不大明白!!!!!!!!

论坛徽章:
0
15 [报告]
发表于 2009-03-06 10:12 |只看该作者
原帖由 ly5066113 于 2009-3-6 09:12 发表
呵呵,都用awk,写个sed的:

sed -r 's/&/\n1\n2\n3\n4\n5&/;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;ta;s/\n.\b/\t0/g' urfile

好一个sed,好一个12345,好一个正则,不得不服,不过s/\n.\b/中的\b可以不用吧?


楼上的不明白可以这样:
sed -r '1!d;s/&/\n1\n2\n3\n4\n5&/;p;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;p;ta;s/\n.\b/\t0/g'  file
蓝色的部分是为了你分析时加的,你可以运行后仔细看到整个过程。

看了楼下tim说的原来用的空格,也补上空格:
sed -r 's/&/ 1 2 3 4 5&/;:a;s/ (.)(.*)&\1=([^&]+)/\t\3\2/;ta;s/ ./\t0/g' file

[ 本帖最后由 dream3401 于 2009-3-6 10:29 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
16 [报告]
发表于 2009-03-06 10:16 |只看该作者

回复 #15 dream3401 的帖子

恩,可以不用。
开始用的空格,后来觉得还是用\n最好,忘记去掉了。

论坛徽章:
0
17 [报告]
发表于 2009-03-06 10:29 |只看该作者

回复 #13 ly5066113 的帖子

好长,我没看懂。

论坛徽章:
0
18 [报告]
发表于 2009-03-06 10:44 |只看该作者

回复 #13 ly5066113 的帖子

这个太牛了 ,还请帖主
好好解释一下
看不懂啊

论坛徽章:
0
19 [报告]
发表于 2009-03-06 11:08 |只看该作者
sed -r '1!d;s/&/\n1\n2\n3\n4\n5&/;p;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;p;ta;s/\n.\b/\t0/g' tay.log

1
2
3
4
5&1=99&2=100
        99
2
3
4
5&2=100
        99      100
3
4
5
        99      100
3
4
5
        99      100     0       0       0





    还是晕

论坛徽章:
0
20 [报告]
发表于 2009-03-06 11:09 |只看该作者
原帖由 ly5066113 于 2009-3-6 09:12 发表
呵呵,都用awk,写个sed的:

sed -r 's/&/\n1\n2\n3\n4\n5&/;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;ta;s/\n.\b/\t0/g' urfile


真佩服tim大哥,呵呵!
sed -r 's/&/\n1\n2\n3\n4\n5&/;:a;s/\n(.)(.*)&\1=([^&]+)/\t\3\2/;ta;s/\n.\b/\t0/g' urfile
谁能解释下红色部分??为什么是1呢???

[ 本帖最后由 飞鸿无痕 于 2009-3-6 11:17 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP