Chinaunix

标题: awk中RS问题求助 [打印本页]

作者: 风一样的男子1    时间: 2008-03-10 11:08
标题: awk中RS问题求助
有文件:
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
后面两行未输出,请大家帮忙指点,谢谢了!
作者: ly5066113    时间: 2008-03-10 11:14
xargs -n5 < time.txt | awk '{print "start time:"$1,$2,"End time:"$3,$4,"elapsed time:"$5}'
作者: davistar    时间: 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
复制代码

作者: jinl    时间: 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}'
作者: mcolinc    时间: 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}'


这个很巧妙
作者: 风一样的男子1    时间: 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传参数,换行或者空格都可以作为参数分隔符的吗?
作者: chenwenming    时间: 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 编辑 ]
作者: 风一样的男子1    时间: 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
复制代码


最后用这个笨一点的办法搞定了,
谢谢大家指点!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2