免费注册 查看新帖 |

Chinaunix

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

awk中RS问题求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-10 11:08 |只看该作者 |倒序浏览
有文件:
cat time.txt

2008-01-08 17:33:26
2008-01-08 17:33:32
00:00:06
2008-01-08 17:34:12
2008-01-08 17:34:19
00:00:07
2008-01-08 16:34:07
2008-01-08 16:34:14
00:00:07

我想输出的结果:
start time: 2008-01-08 17:33:26  End time: 2008-01-08 17:33:32   elapsed time: 00:00:06
start time: 2008-01-08 17:34:12  End time: 2008-01-08 17:34:19   elapsed time: 00:00:07
start time: 2008-01-08 16:34:07  End time: 2008-01-08 16:34:14   elapsed time: 00:00:07

我用语句:
awk 'BEGIN{FS="\n";RS=""}{print "start time: " $1 "\t End time: " $2 "\t elapsed time: " $3}' time.txt

却只能输出想要的第一行记录:start time: 2008-01-08 17:33:26  End time: 2008-01-08 17:33:32   elapsed time: 00:00:06
后面两行未输出,请大家帮忙指点,谢谢了!

论坛徽章:
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
2 [报告]
发表于 2008-03-10 11:14 |只看该作者
xargs -n5 < time.txt | awk '{print "start time:"$1,$2,"End time:"$3,$4,"elapsed time:"$5}'

论坛徽章:
0
3 [报告]
发表于 2008-03-10 11:41 |只看该作者
通用性不强,给你个思路。gawk

  1. awk 'BEGIN{RS="0+:[0-9]+:[0-9]+"}{if($1)printf"start time:%s endtime:%selapsed time:%s\n", $1,$2,RT}'  urfile
复制代码

论坛徽章:
0
4 [报告]
发表于 2008-03-10 11:56 |只看该作者
RS="" 匹配一个或多个空行作为记录分割,按照你现在的代码,一共只有一条记录,你输出了前三个字段而已。建议你先在00:00那行后面插入回车,再送awk 处理
sed -e 's/^[0-9]{2}:[0-9]{2}:[0-9]$/&\n\n/' time.txt|awk 'BEGIN{FS="\n";RS=""}{print "start time: " $1 "\t End time: " $2 "\t elapsed time: " $3}'

论坛徽章:
0
5 [报告]
发表于 2008-03-10 13:31 |只看该作者
原帖由 ly5066113 于 2008-3-10 11:14 发表
xargs -n5 < time.txt | awk '{print "start time:"$1,$2,"End time:"$3,$4,"elapsed time:"$5}'


这个很巧妙

论坛徽章:
0
6 [报告]
发表于 2008-03-10 13:41 |只看该作者
原帖由 ly5066113 于 2008-3-10 11:14 发表
xargs -n5 < time.txt | awk '{print "start time:"$1,$2,"End time:"$3,$4,"elapsed time:"$5}'


这个的确很巧妙。
给xargs传参数,换行或者空格都可以作为参数分隔符的吗?

论坛徽章:
0
7 [报告]
发表于 2008-03-10 13:43 |只看该作者
原帖由 ly5066113 于 2008-3-10 11:14 发表
xargs -n5 < time.txt | awk '{print "start time:"$1,$2,"End time:"$3,$4,"elapsed time:"$5}'


想不到xargs 这个命令这么有用,以前只看到find 与xargs配合用的.

但是xargs有个缺点.如果没有特别指定,xargs会把"_"当作结束标志。"_"以后参数就传不过去了.

[ 本帖最后由 chenwenming 于 2008-3-10 13:53 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-03-10 14:21 |只看该作者
  1. awk 'BEGIN{FS="\n";RS=""}{
  2. x=1
  3.         while(x<=NF){
  4.         print "start time: " $x "\t End time: " $(x+1) "\t elapsed time: " $(x+2)
  5.         x+=3
  6.         }
  7. }' time.txt
复制代码


最后用这个笨一点的办法搞定了,
谢谢大家指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP