忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 3840 | 回复: 15

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

论坛徽章:
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
发表于 2012-06-18 17:04 |显示全部楼层
前两天过做类似的需求,我先把数据插入到mysql数据库里,然后再写Sql查询的,也比较方便。

论坛徽章:
0
发表于 2012-06-18 17:16 |显示全部楼层
回复 2# RogerZhuo


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

论坛徽章:
0
发表于 2012-06-18 17:22 |显示全部楼层
回复 3# wenzi138
我shell是小菜,不过,肯定有高手能解决的,一同坐等吧:wink:

   

论坛徽章:
0
发表于 2012-06-18 17:42 |显示全部楼层
  1. sed -r ':1;N;s/^(\w+)(.*)((\n.*)*)\n\1 *(.*)$/\1\2_\5\3/M;b1'
复制代码

论坛徽章:
0
发表于 2012-06-18 17:59 |显示全部楼层
回复 5# hbmhalley


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

论坛徽章:
0
发表于 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
发表于 2012-06-18 18:06 |显示全部楼层
回复 6# wenzi138


sed
b
N
s///
/M
正则

哪个不懂?

论坛徽章:
0
发表于 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
发表于 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

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

本版积分规则

DTCC2018购票6.8折优惠进行时

中国数据库技术大会是国内数据库及大数据领域规模最大、最受欢迎的技术交流盛会。 2018年5月10-12日,第九届中国数据库技术大会将如约而至。本届大会以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余位技术专家,共同探讨Oracle、MySQL、NoSQL、大数据等领域的前瞻性热点话题与技术。
----------------------------------------
优惠时间:2018年2月13日前

报名链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP