我有一个如下所示的文档:
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