awk:为所有行添加一个记录分隔符



我正在尝试将一些结构化数据重新格式化为分隔的表格格式,如下所示。每条记录的行数是可变的,但列数不是(实际上是五而不是三)。

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或其他东西效果更好的话。

请您尝试以下操作。

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

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

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

将标题行保存在保留空间中,否则将标题行附加到记录行并重新排列,使标题位于第一位。

通用答案的另一个awk。。

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
$

相关内容

最新更新