免费注册 查看新帖 |

Chinaunix

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

问个列如何变行的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-11 07:42 |只看该作者 |倒序浏览
cat test
key{
    line1
}

key{
    line2
    line3
    line33
    line44
}

key{
    line4
    line5
    line6
}

如何才能变成 key{line 4,line 5,line 6}...这样的形式

论坛徽章:
0
2 [报告]
发表于 2009-11-11 07:57 |只看该作者
只针对贴出的文本

awk -v RS='key{\n|}\n' -v OFS="," 'NF{$1=$1;print "key{"$0"}"}' file

论坛徽章:
0
3 [报告]
发表于 2009-11-11 08:02 |只看该作者

回复 #2 ywlscpl 的帖子

高,实在是高,

论坛徽章:
0
4 [报告]
发表于 2009-11-11 08:10 |只看该作者

回复 #2 ywlscpl 的帖子

再问下,
awk -v RS='key{\n|}\n' -v OFS="," 'NF{$1=$1;print "key{"$0"}"}' file | egrep line33
key{line2,line3,line33,line44}

怎么写才能转到一开始的形式,谢谢

论坛徽章:
0
5 [报告]
发表于 2009-11-11 08:42 |只看该作者

回复 #1 youcz 的帖子

[2]cat 1
key{
    line1
}

key{
    line2
    line3
    line33
    line44
}

key{
    line4
    line5
    line6
}
[2]
[2]
[2]
[2]awk -v RS='key' '{gsub(/\n +/,",");printf "%s%s",t,$0}{t=RS}' 1
key{,line1
}

key{,line2,line3,line33,line44
}

key{,line4,line5,line6
}

论坛徽章:
0
6 [报告]
发表于 2009-11-11 08:47 |只看该作者
development:~# echo "key{line2,line3,line33,line44}"|awk -F[{},] '{printf $1"{\n\t";for(i=2;i<=NF-2;i++)printf $i"\n\t";printf $(NF-1)"\n";printf "}\n"}'
key{
        line2
        line3
        line33
        line44
}

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2009-11-11 08:58 |只看该作者

回复 #4 youcz 的帖子

sed 's/{/&\n/;s/}/\n&/;s/,/\n/g'

论坛徽章:
0
8 [报告]
发表于 2009-11-11 09:00 |只看该作者

回复 #4 youcz 的帖子

echo "key{line2,line3,line33,line44}" | awk -v RS='key{|,|}' 'BEGIN{print "key{"}1;END{print "}"}'

[ 本帖最后由 ywlscpl 于 2009-11-11 09:01 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2009-11-11 09:15 |只看该作者
想起一个小故事。德国生产了一种机器,把生猪从左边推进机器,右边就输出火腿了, 相反,把火腿从右边放进去,左边就会出来一个活猪。
  1. echo 'key{line2,line3,line33,line44}'|sed 's/[{]/&\n/;s/}/\n&/;s/,/\n/g'
  2. key{
  3. line2
  4. line3
  5. line33
  6. line44
  7. }
复制代码


  1. $ echo 'key{line2,line3,line33,line44}'|sed 's/[{]/&\n/;s/}/\n&/;s/,/\n/g'|sed ':n;/key{/N;/}/!bn;s/\n//;s/\n/,/g;s/,}/}/'
  2. key{line2,line3,line33,line44}
复制代码

[ 本帖最后由 blackold 于 2009-11-11 09:47 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP