バックスラッシュで終わる行を繋げる

sedとawkだけ使って、Makefileの書式のようにバックスラッシュ+改行で区切られた複数行を一行に変換するにはどうすればいいのかしら。 にインスパイヤされてバックスラッシュで終わる行を繋げてみます。

行末にバックスラッシュがあると行が続くと見なしてくれるシェルスクリプトや Makefile などがある反面で、それを認識してくれないものも多々あります。

これを awk で処理するには、以下のようにします。

  • 行末がバックスラッシュの場合には printf() 文で改行せずに出力。
  • 行末にバックスラッシュがない場合には print 文で出力。

実際のコードは以下のようになります。

#! /usr/local/bin/nawk -f
# continue_line.awk

{
    if ($0 ~ /\\$/) {
        sub(/\\$/, "");
        printf("%s", $0);
    } else {
        print $0;
    }
}

実行してみましょう。

$ cat test.txt
線路は \
続くよ \
どこまでも
野をこえ \
山こえ \
谷こえて
遥かな町まで \
僕達の
楽しい旅の夢 \
つないでる

$ nawk -f continue_line.awk test.txt
線路は 続くよ どこまでも
野をこえ 山こえ 谷こえて
遥かな町まで 僕達の
楽しい旅の夢 つないでる

awk でやる場合でも、他の方法もありますので、いろいろ試してみてください。

tag_nawk.png tag_nawk.png tag_nawk.png tag_nawk.png