免费注册 查看新帖 |

Chinaunix

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

shell 按关键字合并多行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-18 17:00 |只看该作者 |倒序浏览
比如有一文件file.txt
a 1
a 2
a 3
b 4
b 5
c 6
c 1
d 2
d 4

经过合并后为:
a 1_2_3
b 4_5
c 6_1
d 2_4

如何通过shell脚本实现以上功能,求高手解答

论坛徽章:
0
2 [报告]
发表于 2012-06-18 17:04 |只看该作者
前两天过做类似的需求,我先把数据插入到mysql数据库里,然后再写Sql查询的,也比较方便。

论坛徽章:
0
3 [报告]
发表于 2012-06-18 17:16 |只看该作者
回复 2# RogerZhuo


    shell脚本有没有办法解决呢?

论坛徽章:
0
4 [报告]
发表于 2012-06-18 17:22 |只看该作者
回复 3# wenzi138
我shell是小菜,不过,肯定有高手能解决的,一同坐等吧:wink:

   

论坛徽章:
0
5 [报告]
发表于 2012-06-18 17:42 |只看该作者
  1. sed -r ':1;N;s/^(\w+)(.*)((\n.*)*)\n\1 *(.*)$/\1\2_\5\3/M;b1'
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-06-18 17:59 |只看该作者
回复 5# hbmhalley


    高手啊!果然可以!能帮忙解释下什么意思吗?看不懂呢

论坛徽章:
0
7 [报告]
发表于 2012-06-18 17:59 |只看该作者
本帖最后由 jiejie455 于 2012-06-18 19:34 编辑

awk '{if($1==pre){s=("X"s=="X"?$2:s"_"$2}else{print pre" "s;s=$2;pre=$1}}END{print pre" "s}' data

论坛徽章:
0
8 [报告]
发表于 2012-06-18 18:06 |只看该作者
回复 6# wenzi138


sed
b
N
s///
/M
正则

哪个不懂?

论坛徽章:
0
9 [报告]
发表于 2012-06-18 18:32 |只看该作者
回复 1# wenzi138
  1. awk '{if($1==x){i=i"-"$2}else{if(NR>1){print i};i=$0};x=$1;y=$2}' infile <(echo)
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-06-18 20:15 |只看该作者
本帖最后由 personball 于 2012-06-18 20:35 编辑
  1. personball@vostro:awk$awk '{if(!a[$1]){a[$1]=$1" "$2;}else{a[$1]=a[$1]"_"$2}}END{for(i in a){print a[i]}}' file.txt

  2. a 1_2_3
  3. b 4_5
  4. c 6_1
  5. d 2_4
  6. personball@vostro:awk$cat file.txt
  7. a 1
  8. a 2
  9. a 3
  10. b 4
  11. b 5
  12. c 6
  13. c 1
  14. d 2
  15. d 4

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP