免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk文件转置列转行,合并第一列ID [复制链接]

论坛徽章:
0
发表于 2019-03-20 17:12 |显示全部楼层
群里的各位大神,我有一个处理后的文件长以下样子
ID1 A 0.897
ID1 B 0.457
ID2 A 0.956
ID2 B 0.912
ID3 A 0.885
ID3 B 0.902
    ...
ID1000 A 0.658
ID1000 B 0.567

我想按ID合并行,把同一个ID下的两行合并成两列如下
         A         B
ID1 0.897  0.457
ID2 0.956  0.912
ID3 0.885  0.902
     ...
ID1000 0.658 0.567

我暂时想出来的方法是awk ‘{pring $2, $3}’ | awk '{for(i=0;++i<=NFa=a?a FS $ii}END{for(i=0;i++<NFprint a}'
但是ID列要怎么加入这个输出文件啊?还是有更简单的方法?请各位大神不吝赐教,小女子感激不尽

论坛徽章:
0
发表于 2019-03-20 17:56 |显示全部楼层
  1. [root@vh120 awk]# cat test.awk
  2. #!/usr/bin/awk -f
  3. #

  4. {
  5.   a[$2]=1
  6.   b[$1]=b[$1]?b[$1]"  "$3:$3
  7. }

  8. END{
  9.   for(i in a)
  10.     printf "%7s",i
  11.   print ""
  12.   for(i in b)
  13.     print i,b[i]
  14. }

  15. [root@vh120 awk]# ./test.awk a00.xml
  16.       A      B
  17. ID1 0.897  0.457
  18. ID2 0.956  0.912
  19. ID3 0.885  0.902
复制代码

论坛徽章:
0
发表于 2019-03-21 13:18 |显示全部楼层
回复 2# jzsjm1002

非常感谢,谢谢,原来用两个数组就好了,感激不尽

论坛徽章:
0
发表于 2019-03-21 17:23 |显示全部楼层
回复 2# jzsjm1002

请问如果我想打印出第三和第四列
ID1 A 0.897 0.231
ID1 B 0.457 0.365
ID2 A 0.956 0.458
ID2 B 0.912 0.258
ID3 A 0.885 0.863
ID3 B 0.902 0.758



变成
ID1 0.897 0.231 0.457 0.365
ID2 0.956 0.458 0.912 0.258
ID3 0.885 0.863 0.902 0.758

我以为只要把第四列加入程序就好了,可是完全不行啊,为什么?求教,谢谢
  • {
  •   b[$1]=b[$1]?b[$1]"  "$3 $43 $4
  • }
  • END{
  •     for(i in b)
  •     print i,b
  • }


论坛徽章:
0
发表于 2019-03-21 18:44 |显示全部楼层
我试了以下代码,完全不对啊
{
  b[$1]=b[$1]?b[$1]"  "$3: $4
}
END{
    for(i in b)
    print i,b
}

论坛徽章:
0
发表于 2019-03-21 20:02 |显示全部楼层
回复 2# jzsjm1002

我知道怎么弄了,谢谢
$6" "$76" "$7就好了,谢谢非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP