AWK - 将上一行添加到下两行的开头

AWK - 将上一行添加到下两行的开头

我有一个如下所示的文档:

Bob:
This is my line
This is also my line
Alfred:
What a great day!
What should we do!
Jess:
Its so hot
Lets go to the Beach

格式总是一样的,总是一样的

speaker
line1
line2
speaker
line1
line2

从来没有额外的线路等等。

我希望“扬声器”位于每行的开头,因此在我的示例中是:

Bob: This is my line
Bob: This is also my line
Alfred: What a great day!
Alfred: What should we do!
Jess: Its so hot
Jess: Lets go to the Beach

我尝试使用 awk 提取每个“第 n”行

awk '{if (NR % 3 == 1) print $0}'

但我不确定如何将其添加回接下来两行的开头。

感谢您的帮助

答案1

awk 'NR%3==1{ name=$0; next } { print name, $0 }' file

如果条件为真,则将记录保存到变量name并继续处理next记录。

否则,打印name当前记录。

答案2

我会改变逻辑。获取最新的发言者,然后将其固定在所有其他行的前面,直到出现另一个发言者。如果您只有一行或多于两行文本,这可能会更强大。

awk '/^[[:alpha:]]+:$/ {speaker=$1;next} {print speaker,$0}' file

答案3

sed根据规定的文件格式,我们可以使用如下方法来完成

sed -e '
  h;N;s/\n/ /
  n;H;g;s// /
' file

相关内容