免费注册 查看新帖 |

Chinaunix

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

大伙看看这个文件怎么处理呢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-03 12:56 |只看该作者 |倒序浏览
文件格式是这样的:
苏儿真###Te Amo|天蓝过我的忧郁|爱你的一切|七夕没下雨|闭上眼睛数到三|似曾相恋|当我们不在一起|不是同路人|十八岁|不爱就拉倒|赢了爱情输了朋友
黄鸿升###鬼混
童丽###忘记你|你在哪里|爱在何方|情逝|矜持|绿袖子|一天一万年|空白|如果云知道|我心永恒|秋意浓|在恋爱国度留下的伤|说再见
刘美君###Dance Medley|清晨|隔|Man In The Moon|蠢动|赤裸抱月下|Give Me All Your Love, Boy|霓虹鸟|Medley|富士山下|我估不到|点解 - 刘美君林海峰|Dance Medley1|So Sad - 刘美君草蜢|依依|你说是甜我说苦|偷窥 - 刘美君苏永康|这双眼只望你|夜已变得骚了|事后|最后一夜|浮花|午夜情|一见钟情|最后一夜 (Ballad Version)|最后一夜 (Studio Ballad Version) (Bonus Track)
熊宝贝乐团###营火|灰色

每条记录有两个域,一个是歌手,一个是歌曲中间用###分隔,歌曲之间用"|"分隔。

我现在要把每个歌曲列出来对应歌手,变成歌曲空格歌手的形式
例如第一条记录转化后要变成这样的形式:
Te Amo  苏儿真
天蓝过我的忧郁 苏儿真
爱你的一切 苏儿真
。。。
。。。
赢了爱情输了朋友 苏儿真


这个用shell脚本怎么实现呢,awk可以吗?

论坛徽章:
0
2 [报告]
发表于 2008-06-03 13:09 |只看该作者

  1. awk -F"[#|]" '{for(i=4;i<=NF;i++){$i=$i" "$1;printf"%s\n",$i}}'  file
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2008-06-03 13:12 |只看该作者
  1. awk -F'###' '{split($2,a,"|");for(i in a) print a[i],$1}' urfile
复制代码

论坛徽章:
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
4 [报告]
发表于 2008-06-03 13:24 |只看该作者
LS的都是高手啊,我也学用awk:

  1. awk -F"[#|]+" '{for (i=2;i<=NF;i++) print $i,$1}'  urfile
复制代码

论坛徽章:
0
5 [报告]
发表于 2008-06-03 14:36 |只看该作者
顶一下楼上的

论坛徽章:
0
6 [报告]
发表于 2008-06-03 15:00 |只看该作者

回复 #2 davistar 的帖子

awk -F"[#|]" '{for(i=4;i<=NF;i++){$i=$i" "$1;printf"%s\n",$i}}'  file

这个完全能实现我要的效果,这里的i是什么意思呢,为什么要令其等于四??这个和4楼的那段代码中的i是一个作用吗

论坛徽章:
0
7 [报告]
发表于 2008-06-03 15:02 |只看该作者

回复 #4 blackold 的帖子

awk -F"[#|]+" '{for (i=2;i<=NF;i++) print $i,$1}'  urfile


这个也能实现我要的效果啊
这个分隔符中的“+”是什么意思呢
能给我解释下吗?

论坛徽章:
0
8 [报告]
发表于 2008-06-03 15:07 |只看该作者

回复 #3 ly5066113 的帖子

awk -F'###' '{split($2,a,"|");for(i in a) print a,$1}' urfile

呵呵
每次都麻烦你呢。
你这段我看懂了,也是我要的效果,但是有一点就是歌曲顺序不对啊
你比如第一条记录是:苏儿真###Te Amo|天蓝过我的忧郁|爱你的一切|七夕没下雨|闭上眼睛数到三|似曾相恋|当我们不在一起|不是同路人|十八岁|不爱就拉倒|赢了爱情输了朋友

但是输出的结果却是这样的:
七夕没下雨 苏儿真
闭上眼睛数到三 苏儿真
似曾相恋 苏儿真
当我们不在一起 苏儿真
不是同路人 苏儿真
十八岁 苏儿真
不爱就拉倒 苏儿真
赢了爱情输了朋友 苏儿真
Te Amo 苏儿真
天蓝过我的忧郁 苏儿真
爱你的一切 苏儿真


为什么顺序不对呢,是不是跟i的设置有关呢

论坛徽章:
0
9 [报告]
发表于 2008-06-03 15:26 |只看该作者
看来楼主还是很认真的,每个人的回复都仔细研究了一下
不过,建议你看看awk的手册,所有的问题都有答案

论坛徽章:
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
10 [报告]
发表于 2008-06-03 15:32 |只看该作者

回复 #7 lonely4324 的帖子

FS="[#|]+" 表示由一个或多个#或者|组成字符串作为字段分隔符。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP