在awk中打印匹配的字段分隔符

用户名

给出以下记录

01-01-2012 18:02 some data 01-11-2014 20:22 some other data 10-02-2014 14:00 more data still

我正在尝试将日期,时间和数据进行分组,并将它们打印在单独的行上,如下所示:

01-01-2012 18:02 some data
01-11-2014 20:22 some other data
10-02-2014 14:00 more data still

但是,到目前为止,我有:

echo '01-01-2012 18:02 some data 01-11-2014 20:22 some other data 10-02-2014 14:00 more data still' | awk -F '[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*' '{ for ( n=1; n<=NF; n++ ) print $n }

结果是:

 some data 
 some other data 
 more data still

日期和时间丢失。它们是字段分隔符,因此不打印。

我如何修改我的awk脚本以打印与正则表达式匹配的每个字段分隔符?

阿努巴瓦

使用gnu awk:

awk -v RS='[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+' '!NF{s=RT;next} {print s $0}' file
01-01-2012 18:02 some data
01-01-2012 18:02 some other data
01-01-2012 18:02 more data still

编辑:使用非gnu awk,您可以执行以下操作:

awk '{gsub(/[[:blank:]]+[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+/, "\n&"); 
      gsub(/\n[[:blank:]]+/, "\n")} 1' file
01-01-2012 18:02 some data
01-11-2014 20:22 some other data
10-02-2014 14:00 more data still

grep -P可以使用

grep -oP '[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+.+?(?=[0-9]+-[0-9]+-[0-9]+|$)' file
01-01-2012 18:02 some data
01-11-2014 20:22 some other data
10-02-2014 14:00 more data still

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章