免费注册 查看新帖 |

Chinaunix

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

关于AWK处理文件,急!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-25 11:47 |只看该作者 |倒序浏览
我有一个文件,形式如下
用户ID1|用户费项1|金额|用户费项2|金额|用户费项3|金额
用户ID2|用户费项1|金额|用户费项2|金额|用户费项3|金额
用户ID3|用户费项1|金额|用户费项2|金额|用户费项3|金额

现在我想将其处理成如下格式
用户ID1|用户费项1|金额
用户ID1|用户费项2|金额
用户ID1|用户费项3|金额
用户ID2|用户费项1|金额
用户ID2|用户费项2|金额
用户ID2|用户费项3|金额
用户ID3|用户费项1|金额
用户ID3|用户费项2|金额
用户ID3|用户费项3|金额


不知道能不能AWK实现,我是一个新手,请给个思路,谢谢!!!

论坛徽章:
8
白羊座
日期:2015-01-21 18:35:03巳蛇
日期:2015-02-03 17:30:37处女座
日期:2015-02-03 17:31:02羊年新春福章
日期:2015-02-03 17:31:21巨蟹座
日期:2015-02-05 16:01:06申猴
日期:2015-02-05 16:01:31摩羯座
日期:2015-02-05 16:01:41酉鸡
日期:2015-02-05 16:02:37
2 [报告]
发表于 2003-04-25 12:15 |只看该作者

关于AWK处理文件,急!!

其实就是下面的一行信息转换为三行:

<用户ID1|用户费项1|金额|用户费项2|金额|用户费项3|金额
>用户ID1|用户费项1|金额
>用户ID1|用户费项2|金额
>用户ID1|用户费项3|金额

可以实现的,就是awk的最基本的功能:指定域分隔符、格式化域信息。

  1.   awk '{FS="|"; print $1"|"$2"|"$3"\n"$1"|"$4"|"$5"\n"$1"|"$6"|"$7}' filename.txt
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-04-25 12:16 |只看该作者

关于AWK处理文件,急!!

awk -F"|" '{printf("%s|%s|%s\n%s|%s|%s\n%s|%s|%s\n",$1,$2,$3,$1,$4,$5,$1,$6,$7)}'

论坛徽章:
0
4 [报告]
发表于 2003-04-25 13:14 |只看该作者

关于AWK处理文件,急!!

谢谢帮助!!但是能否使用循环语句来实现??因为一行的数据比较多,有40个需要处理的用户费项,如果按照这种处理方法,很麻烦,并且容易出错,如果可以给个循环的处理方式最好了。
1443675|01/01/2003 00:00:00|YZF|10|TYZF|0|ZHFJ0|0|ZHFJ1|0|YDF|37.92|YDF1|.1|YDF2|.4|GNCT|0|GNCF|0|GNJN|0|GJCT|0|GJCF|0|NMGN|0|NMGJ|0|NMYD|0|WMGN|0|WMGJ|0|WMYD|0|GMGN|0|GMGJ|0|GMYD|0|JMS|0|JMS1|0|JMS2|0|JMS3|0|JMS4|0|JMS5|0|JMS6|0|XXF|0|WWF|0|BSS|0|JBS|0|DHYF|0|FQFK|0|BXF|0|QT|0|QT1|0|QT2|0|ZNJ|1.89|
2445292|01/01/2003 00:00:00|YZF|10|TYZF|0|ZHFJ0|0|ZHFJ1|0|YDF|55.44|YDF1|0|YDF2|.4|GNCT|0|GNCF|2.4|GNJN|0|GJCT|0|GJCF|0|NMGN|0|NMGJ|0|NMYD|0|WMGN|3.39|WMGJ|0|WMYD|10.8|GMGN|0|GMGJ|0|GMYD|0|JMS|0|JMS1|0|JMS2|0|JMS3|0|JMS4|0|JMS5|0|JMS6|0|XXF|.3|WWF|0|BSS|0|JBS|0|DHYF|0|FQFK|0|BXF|0|QT|0|QT1|0|QT2|2|ZNJ|3.3|

论坛徽章:
0
5 [报告]
发表于 2003-04-25 14:49 |只看该作者

关于AWK处理文件,急!!

awk -F"|" '{for(i=2;i<NF;i+=2){print $1"|"$i"|"$(i+1)}}' filename

论坛徽章:
0
6 [报告]
发表于 2003-04-25 15:27 |只看该作者

关于AWK处理文件,急!!

谢谢nkliyong!!

论坛徽章:
0
7 [报告]
发表于 2003-04-25 16:52 |只看该作者

关于AWK处理文件,急!!

有个简单的法子,直接替换就好
在VI 编辑
:g/金额\|/s//金额^M/g   就可办到了

论坛徽章:
0
8 [报告]
发表于 2003-04-25 17:19 |只看该作者

关于AWK处理文件,急!!

原帖由 "凝嫣" 发表:
有个简单的法子,直接替换就好
在VI 编辑
:g/金额\|/s//金额^M/g   就可办到了


这句话什么意思?

论坛徽章:
0
9 [报告]
发表于 2003-04-25 17:49 |只看该作者

关于AWK处理文件,急!!

如果用VI 编辑的话
:g/金额\|/s//金额^M/g ==  :%s/金额\|/金额^M/g
意思是把每个金额后面的分隔符替换成'回车'啊

论坛徽章:
0
10 [报告]
发表于 2003-04-25 17:50 |只看该作者

关于AWK处理文件,急!!

原帖由 "凝嫣" 发表:
有个简单的法子,直接替换就好
在VI 编辑
:g/金额\|/s//金额^M/g   就可办到了

不会吧!
unix只承认换行,并不承认回车的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP