免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ywlscpl
打印 上一主题 下一主题

RS、ORS、FS、OFS相关问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-01-14 19:40 |只看该作者
跟据ANDY的改了下,Andy的这个NF做判断用的太好了。
因为经常碰到类似的数据处理,做个记录。
蓝色的是行分隔符,转换成默认的"\n"为行分割;红色的是输出需要的OFS
awk -v RS=# 'NF{printf $1;for(i=2;i<=NF;i++)if($i) printf ","$i;print ""}' file
1,2,3
4,5
6,7,8,9
#

不知道有没有更精简的

[ 本帖最后由 ywlscpl 于 2009-1-14 19:44 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2009-01-14 19:46 |只看该作者
对于3楼的问题还是疑惑,难道$0跟$1,$2,$3,$4,....$NF不等价了吗?

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
13 [报告]
发表于 2009-01-14 19:49 |只看该作者

回复 #12 ywlscpl 的帖子

$0将原样输出一条记录....那么\n将生效...

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
14 [报告]
发表于 2009-01-14 19:50 |只看该作者
原帖由 ywlscpl 于 2009-1-14 19:18 发表
andy能解答一下3楼中的问题吗?感到很疑惑

如justlooks所说。
原帖由 justlooks 于 2009-1-14 19:31 发表
sed&awk书里有关于这方面的描述,如果定义了 OFS和ORS的话 一定要变一下,不然的话OFS和ORS不会起作用,原话我忘记了,你翻下书就明白了
  1. awk 'BEGIN{RS="#";OFS=","}NF{NF+=0;print}'
复制代码

论坛徽章:
0
15 [报告]
发表于 2009-01-14 19:54 |只看该作者

回复 #13 liaosnet 的帖子

感谢liaosnet的解答,帮我弄清了一个概念。
原来print $0跟print $1,$2,$3,$4,....$NF是不等价的,print $0的时候忽略OFS了,直接输出原记录了,以前一直以为两者相同。
  1. # awk 'BEGIN{FS="|";OFS=","}{print $0}' o1
  2. 10|2|4
  3. 30|3|9
  4. 10|4|7
  5. 20|7|6
  6. # awk 'BEGIN{FS="|";OFS=","}{print $1,$2,$3}' o1
  7. 10,2,4
  8. 30,3,9
  9. 10,4,7
  10. 20,7,6
复制代码

[ 本帖最后由 ywlscpl 于 2009-1-14 19:56 编辑 ]

论坛徽章:
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
16 [报告]
发表于 2009-01-14 20:46 |只看该作者

回复 #1 ywlscpl 的帖子

awk 'BEGIN{RS="#";OFS=","}NF&&$1=$1' urfile

论坛徽章:
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
17 [报告]
发表于 2009-01-14 20:49 |只看该作者

回复 #14 ynchnluiti 的帖子

这个思路学习了,改进了下:

awk 'BEGIN{RS="#";OFS=","}NF+=0' urfile

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
18 [报告]
发表于 2009-01-14 21:11 |只看该作者

回复 #17 ly5066113 的帖子

看不懂...:em11: :em11: :em11:

论坛徽章:
0
19 [报告]
发表于 2009-01-14 21:33 |只看该作者

回复 #18 liaosnet 的帖子

我也没看懂。。。晕
awk还没学好。。。。。

论坛徽章:
0
20 [报告]
发表于 2009-01-14 21:42 |只看该作者
不错不错,我想起来了书上有这招
awk 'BEGIN{RS="#\n"}$1=$1' data.txt|sed 's/\ //g'

[ 本帖最后由 justlooks 于 2009-1-14 21:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP