免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5763 | 回复: 11
打印 上一主题 下一主题

[文本处理] 【急】关于AWK,多行合并为一行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-12 13:58 |只看该作者 |倒序浏览
大家好!
现有如下示例数据:
  其中”域“分隔符为"\t",第四个域表示:"24小时中的某个时间段,一共从00~23; 第五个域表示:在该时段的具体业务值
3        wlbzxm2013.goepe.com        goepe.com        08        4
3        wlc01.jigsy.com        jigsy.com        19        2
3        wlc02.diandian.com        diandian.com        08        3
3        wlc02.diandian.com        diandian.com        11        3
3        wlc02.diandian.com        diandian.com        13        10
3        wlc02.diandian.com        diandian.com        15        4

现在希望通过AWK,将其转换为如下方式,(按照第四个域的数字顺序(00~23),依次将第五个域用"逗号"进行合并为一行),如下形式:
3        wlbzxm2013.goepe.com        goepe.com        0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
3        wlc01.jigsy.com        jigsy.com        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0
3        wlc02.diandian.com        diandian.com        0,0,0,0,0,0,0,3,0,0,3,0,10,0,4,0,0,0,0,0,0,0,0,0

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
2 [报告]
发表于 2012-11-12 14:38 |只看该作者
本帖最后由 yestreenstars 于 2012-11-12 15:01 编辑

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
3 [报告]
发表于 2012-11-12 14:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
4 [报告]
发表于 2012-11-12 15:05 |只看该作者
回复 2# yestreenstars


    把你的结果价格管道改改应该也可以实现的

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
5 [报告]
发表于 2012-11-12 15:07 |只看该作者
回复 3# zooyo


    代码看着头晕啊。!

论坛徽章:
0
6 [报告]
发表于 2012-11-12 15:15 |只看该作者
回复 2# yestreenstars

谢谢兄台,我去试试


   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2012-11-12 16:33 |只看该作者
之前没看清题目,下面是修改后的命令:
  1. awk '!a[$2]{a[$2]=$1"\t"$2"\t"$3;for(i=1;i<$4;i++)b[$2]=b[$2]?b[$2]"0,":"0,";b[$2]=b[$2]$5;for(i=$4;i<24;i++)b[$2]=b[$2]",0";next}{if($4==0)b[$2]=gensub(/,./,","$5,23,b[$2]);else b[$2]=gensub(/.,/,$5",",$4,b[$2])}END{for(i in a)print a[i]"\t"b[i]}' 1.txt
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2012-11-12 16:34 |只看该作者
本帖最后由 yestreenstars 于 2012-11-12 16:34 编辑

@zhaopingzi我试过加管道也很难实现,要不我把命令给你试一下?

论坛徽章:
0
9 [报告]
发表于 2012-11-12 21:27 |只看该作者
回复 7# yestreenstars
非常感谢,试了下,可以~
我AWK不好,我观察了下其他的文件,还有别的情况如下:

1.计算[平均停留时长],数据样本如下分隔符用的是^A(先按ctrl+v,再按ctrl+a)):
  1-1.其中:最后一列的数据,希望可以在处理的时候保留2位小数(四舍五入)
       (依照第四个域,将第五个域,按照00~23的顺序,进行合并为一行)
-------------------------------------------------------------------------
  3[分隔符]n41.nsmartad.com[分隔符]nsmartad.com[分隔符]19[分隔符]108.000000
  3[分隔符]www.artrade.com[分隔符]artrade.com[分隔符]15[分隔符]29.000000
  3[分隔符]www.artron.net[分隔符]artron.net[分隔符]11[分隔符]215.437500
  3[分隔符]www.artron.net[分隔符]artron.net[分隔符]20[分隔符]13.428571
  3[分隔符]www.artsadministration.org[分隔符]artsadministration.org[分隔符]19[分隔符]108.000000

1-2.其中:最后一列的数据,希望可以在处理的时候保留2位小数(四舍五入)
    (依照第三个域,将第四个域,按照00~23的顺序,进行合并为一行) :
-------------------------------------------------------------------------
  4[分隔符]entrepreneur-hub.com[分隔符]04[分隔符]1.000000
  4[分隔符]entrust.net[分隔符]08[分隔符]31.666667
  4[分隔符]entrust.net[分隔符]17[分隔符]1.500000
  4[分隔符]enufcjb.com[分隔符]02[分隔符]19.000000
  4[分隔符]envelopemachine.com[分隔符]15[分隔符]91.000000
  4[分隔符]environmentmaine.org[分隔符]10[分隔符]404.000000
  4[分隔符]environmentnewyork.org[分隔符]11[分隔符]44.142857

如果可以的话,兄能加下我QQ吗?我还有一些问题想请教下,谢谢~~QQ:280601922
   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
10 [报告]
发表于 2012-11-13 09:28 |只看该作者
回复 9# ancestor


    把你范例想要的结果贴出来吧,这样好分析一点。以后有问题就在论坛上问就好了,这里高手多啊,我每天都会逛论坛的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP