AWK - 次の2行の先頭に前の行を追加します。

AWK - 次の2行の先頭に前の行を追加します。

次の文書があります。

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}'

しかし、次の2行の先頭に再度追加する方法がわかりません。

ご協力ありがとうございます

答え1

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

条件がtrueの場合、レコードを変数に保存してレコードname処理を続行します。next

それ以外の場合は、name現在のレコードを印刷します。

答え2

私はロジックを変更します。最新のプレゼンターを取得し、他のプレゼンターが表示されるまで、他のすべての行の前に固定します。テキストが 1 行または 2 行以上の場合、この方法はより強力な場合があります。

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

答え3

sed指定したファイル形式に応じて、次の方法で完了できます。

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

関連情報