免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11980 | 回复: 3

[文本处理] awk命令如何实现以下功能 [复制链接]

论坛徽章:
0
发表于 2021-01-22 15:00 |显示全部楼层
我有一个文件,每行有3列数据,原始数据格式A i 1
A i 2
A i 3
A o 1
A o 2
B i 2
B i 3
B o 1
B o 2
B o 3

我想实现的功能,是根据第一列的内容,和第二列的内容(只有2个值(i,o)),把数据转换展示。请问各位大神如何实现这个功能。
 
i
o
A
1
1
A
2
2
A
3
B
2
1
B
3
2
B
3




论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2021-04-02 18:16 |显示全部楼层
数据转换展示 按什么规则来的?

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2021-05-30 08:38 |显示全部楼层
  1. awk '!a[$1$2]++{k=1}$2=="i"{i[$1""k]=$3}$2=="o"{o[$1""k]=$3}{if(!t[$1""k]++)n[++m]=$1""k; k++}END{print "  i o";for(q=1;q<=m;q++){s=n[q];split(s, ss, "");print ss[1],i[s]?i[s]:" ",o[s]?o[s]:" "}}' file
复制代码

论坛徽章:
24
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:1915-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:37
发表于 2021-06-23 16:04 |显示全部楼层
本帖最后由 wh7211 于 2021-06-23 18:15 编辑

回复 1# ontherd


  1. cat 1
  2. A i 1
  3. A i 2
  4. A i 3
  5. A o 1
  6. A o 2
  7. B i 2
  8. B i 3
  9. B o 1
  10. B o 2
  11. B o 3

  12. awk 'function p(x,y){l=length(x)>length(y)?length(x):length(y);for(i=1;i<=l;i++){x[i]=x[i]?x[i]:" ";y[i]=y[i]?y[i]:" ";print b,x[i],y[i]};delete x;delete y;d=f=0}BEGIN{print "  i o"}!a[$1]++&&NR>1{p(c,e)}$2=="i"{b=$1;c[++d]=$3}$2=="o"{e[++f]=$3}END{p(c,e)}' 1
  13.   i o
  14. A 1 1
  15. A 2 2
  16. A 3  
  17. B 2 1
  18. B 3 2
  19. B   3

  20. awk 'BEGIN{print "  i o"}$2=="i"{if(!a[$1$2]++){c=0};b[$1][++c]=$3}$2=="o"{if(!a[$1$2]++){e=0};d[$1][++e]=$3}END{for(i in b){l=length(b[i])>length(d[i])?length(b[i]):length(d[i]);for(j=1;j<=l;j++){b[i][j]=b[i][j]?b[i][j]:" ";d[i][j]=d[i][j]?d[i][j]:" ";print i,b[i][j],d[i][j]}}}' 1
  21.   i o
  22. A 1 1
  23. A 2 2
  24. A 3  
  25. B 2 1
  26. B 3 2
  27. B   3
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP