免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk合并操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-11 16:26 |只看该作者 |倒序浏览
我有一个文档是下面这样的,想按第一列匹配,合并成多列,如果没有就补0,第一个部分的第一列信息是全的,也就是a b c d 后面不会出现e
a 111
b 222
c 333
d 444

a 555
b 666

a 777
c 888

结果显示如下:
a 111 555 777
b 222 666 0
c 333 0 888
d 444 0 0


大神帮帮忙……

论坛徽章:
0
2 [报告]
发表于 2016-05-11 16:30 |只看该作者
合并我倒是会,但是不知道怎么补零。。

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2016-05-11 16:34 |只看该作者
回复 1# xdy1017714
a 111
b 222
c 333
d 444

a 555
b 666

a 777
c 888
   
是1个文件的内容, 还是3个文件?

论坛徽章:
0
4 [报告]
发表于 2016-05-11 16:38 |只看该作者
是一个文件。空行分开的。

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
5 [报告]
发表于 2016-05-11 16:52 |只看该作者
  1. awk -vk=1 '!NF{++k}NF{a[$1][k]=$2}END{for(i in a){s=i;for(j=1;j<=k;j++)s=s" "(j in a[i]?a[i][j]:"0");print s}}' file
  2. a 111 555 777
  3. b 222 666 0
  4. c 333 0 888
  5. d 444 0 0
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
6 [报告]
发表于 2016-05-11 17:08 |只看该作者
回复 5# haooooaaa

这思路很赞啊, 比我的好多了, 我都不好意思贴自己的了...
   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
7 [报告]
发表于 2016-05-11 17:13 |只看该作者
本帖最后由 haooooaaa 于 2016-05-11 17:47 编辑

如果有的是空两行, 有的是空三行,就有问题了,

改了一下,
  1. awk -vRS= '{for(i=1;i<=NF;i+=2)a[$i][NR]=$(i+1)}END{for(i in a){s=i;for(j=1;j<=NR;j++)s=s" "(j in a[i]?a[i][j]:"0");print s}}' file
复制代码
非 4.0
  1. awk -vRS= '{for(i=1;i<=NF;i+=2){a[$i]=a[$i] $(i+1)" ";b[$i]};for(i in a)a[i]=i in b?a[i]:a[i]"0 ";delete b}END{for(i in a)print i,a[i]}' file
复制代码

论坛徽章:
0
8 [报告]
发表于 2016-05-11 17:47 |只看该作者
回复 7# haooooaaa


大神!膜拜,想的太全面了,。爱你啊


   

求职 : 技术支持/维
论坛徽章:
0
9 [报告]
发表于 2016-05-11 19:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2016-05-11 20:21 |只看该作者
$ awk '!NF{if(S)c++;S=0;next}{S=1;if(!a[$1]++)d[++t]=$1;b[$1,+c]=$2}END{for(n=1;n<=t;++n){s=d[n];for(m=0;m<=c;++m)s=s" "b[d[n],m]+0;print s}}' FILE | column -t
a  111  555  777
b  222  666  0
c  333  0    888
d  444  0    0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP