AWK:将一个记录分离器的所有行

时间:2019-02-02 17:39:31

标签: awk sed

我试图重新格式化一些结构化数据,象下面,成分隔的表格格式。每条记录的行数是可变的,但列数却不是(实际上是五而不是三)。

title1
data data data
data data data
data data data
title22
data data data
data data data
title333
data data data

结果应如下所示(记录分隔符的另一列):

title1 data data data
title1 data data data
title1 data data data
title22 data data data
title22 data data data
title333 data data data

使用awk记录分隔符很容易用"title[0-9]+"进行正则表达式,但是我无法将其添加到与每个分隔的记录对应的行中。

awk '{RS="title[0-9]+"}{print RT $0}' file

如果awk或其他更好的方法,则不必是sed

3 个答案:

答案 0 :(得分:2)

请您尝试以下。

awk '/^title/{val=$0;next} {print val,$0}'  Input_file

答案 1 :(得分:0)

这可能对您有用(GNU sed):

 sed -E '/^title/h;//d;G;s/(.*)\n(.*)/\2 \1/' file

将标题行保存在保留空间中,否则将标题行追加到记录行并重新排列,以使标题排在首位。

答案 2 :(得分:0)

另一个通用答案。

awk '  { if(NF>1) {print title,$0 } else { title=$0} } '

带有输入:

$ cat drcatfish.txt
title1
data data data
data data data
data data data
title22
data data data
data data data
title333
data data data

$ awk '  { if(NF>1) {print title,$0 } else { title=$0} } ' drcatfish.txt
title1 data data data
title1 data data data
title1 data data data
title22 data data data
title22 data data data
title333 data data data

$