免费注册 查看新帖 |

Chinaunix

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

[文本处理] 合并行并插入逗号 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-09 11:05 |只看该作者 |倒序浏览
本帖最后由 紫风8824 于 2014-07-09 11:13 编辑

求教:
>Potri.010G1602 969 99996 104 specific cd04300 GT1_Glycogen_Phosphorylase 0 1224.62
>Potri.010G1602 969 263942 104 superfamily cl10013 Glycosyltransferase_GTB_type 0 1224.62
>Potri.010G1602 969 233722 107 multidom TIGR02093 P_ylase 0 1111.18
>Potri.010G1602 973 99996 104 specific cd04300 GT1_Glycogen_Phosphorylase 0 1218.85
>Potri.010G1602 973 263942 104 superfamily cl10013 Glycosyltransferase_GTB_type 0 1218.85
>Potri.010G1602 973 233722 107 multidom TIGR02093 P_ylase 0 1105.79
变成:
>Potri.010G1602 969 99996,104,specific,cd04300,,,GT1_Glycogen_Phosphorylase,0,1224.62  263942,104,superfamily,cl10013,,,Glycosyltransferase_GTB_type,0,1224.62  233722,107,multidom,,,TIGR02093 P_ylase,0,1111.18
>Potri.010G1602 973 99996,104,specific,cd04300,,,GT1_Glycogen_Phosphorylase,0,1218.85 263942,104,superfamily,cl10013,,,Glycosyltransferase_GTB_type,0,1218.85 233722,107,multidom,TIGR02093,,,P_ylase,0,1105.79
请大神指教~谢谢!

论坛徽章:
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
2 [报告]
发表于 2014-07-09 11:15 |只看该作者
本帖最后由 Herowinter 于 2014-07-09 11:16 编辑

回复 1# 紫风8824
第一列固定吗?合并条件是第一列 第二列都相同还是第二列相同?

   

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
3 [报告]
发表于 2014-07-09 11:28 |只看该作者
本帖最后由 Kasiotao 于 2014-07-09 11:28 编辑
  1. awk -v flag=0 '{if($2!=flag){if(NR!=1){printf "\n"}printf $1" "$2" ";flag=$2}printf $3","$4","$5","$6",,,"$7","$8","$9" "}' testfile
复制代码
试试 是不是你要的效果

论坛徽章:
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
4 [报告]
发表于 2014-07-09 11:29 |只看该作者
回复 1# 紫风8824
  1. awk '{s=$3;for(i=4;i<=NF;i++){if(i!=7)s=s","$i;else s=s",,,"$i};a[$1" "$2]=length(a[$1" "$2])?a[$1" "$2]" "s:s} END{for(i in a)print i,a[i]|"sort -nk2,2"}' i
  2. >Potri.010G1602 969 99996,104,specific,cd04300,,,GT1_Glycogen_Phosphorylase,0,1224.62 263942,104,superfamily,cl10013,,,Glycosyltransferase_GTB_type,0,1224.62 233722,107,multidom,TIGR02093,,,P_ylase,0,1111.18
  3. >Potri.010G1602 973 99996,104,specific,cd04300,,,GT1_Glycogen_Phosphorylase,0,1218.85 263942,104,superfamily,cl10013,,,Glycosyltransferase_GTB_type,0,1218.85 233722,107,multidom,TIGR02093,,,P_ylase,0,1105.79
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
5 [报告]
发表于 2014-07-09 11:29 |只看该作者
回复 1# 紫风8824
  1. awk -vOFS=',' '{for(i=1;i++<=NF;)a[$1","$2]=a[$1","$2]","$i}END{for(b in a){sub(/,$/,"",a[b]);print b"\n"a[b]}}' hh
  2. >Potri.010G1602,973
  3. ,973,99996,104,specific,cd04300,GT1_Glycogen_Phosphorylase,0,1218.85,,973,263942,104,superfamily,cl10013,Glycosyltransferase_GTB_type,0,1218.85,,973,233722,107,multidom,TIGR02093,P_ylase,0,1105.79
  4. >Potri.010G1602,969
  5. ,969,99996,104,specific,cd04300,GT1_Glycogen_Phosphorylase,0,1224.62,,969,263942,104,superfamily,cl10013,Glycosyltransferase_GTB_type,0,1224.62,,969,233722,107,multidom,TIGR02093,P_ylase,0,1111.18
复制代码

论坛徽章:
0
6 [报告]
发表于 2014-07-09 12:39 |只看该作者
回复 4# Herowinter

看楼主的三个逗号我有点没明白这逻辑,然后看你的结果是正确的,再一看命令……

论坛徽章:
0
7 [报告]
发表于 2014-07-09 15:18 |只看该作者
回复 3# Kasiotao
谢谢~ 可以

论坛徽章:
0
8 [报告]
发表于 2014-07-09 15:19 |只看该作者
回复 2# Herowinter
合并条件是第一列、第二列都相同再合并~


   

论坛徽章:
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
9 [报告]
发表于 2014-07-09 15:32 |只看该作者
  1. sed -r ':1;N;s/^(\S+\s+\S+\b)(.*)\n\1(.*)/\1\2\3/;t1;P;D'
复制代码

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
10 [报告]
发表于 2014-07-09 17:20 |只看该作者
回复 9# yestreenstars

大师楼主还有三个逗号的需求了


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP