次の文書があります。
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