N行ごとに改行を削除

N行ごとに改行を削除

テキストを処理するときは、2行ごとに改行を削除する必要があります。

テキスト例:

this is line one
and this is line two
the third and the
fourth must be pasted too

希望の出力:

this is line one and this is line two
the third and the fourth must be pasted too

ループを試しましたが、whilewhileループは悪い習慣です。trこれを行うために他のコマンドを使用できますか?

答え1

paste(たとえば、標準のPOSIXシンプルユーティリティでもありますtr)これはツールです。

この改行文字を空白ではなく空白に変更したいとしましょう。削除済みサンプルに示すように:

paste -d ' ' - - < file

または:

paste -sd ' \n' file

本当に削除したい場合は、' 'に交換してください。'\0'

3つのうち2つを交換するには:

paste -sd '  \n' file

3つのうち1つ(2番目から始まる):

paste -sd '\n \n' file

など。

もう1つの利点pasteは、終了していない回線が残らないことです。たとえば、削除した場合すべてファイルに改行文字(tr -d '\n' < fileまたはと同じtr '\n' ' ' < file)がある場合、行は改行文字で終わる必要があるため、まったく行がなくなります。したがって、通常、有効なテキストに必要な末尾の改行を追加するpaste(たとえば、paste -sd '\0' fileまたは)を使用することをお勧めします。paste -sd ' ' file

答え2

現代的GNU sed

sed -rz 's/\n([^\n]*\n)/ \1/g' sample.text

そしてアッ

awk '{getline line2;print $0, line2}' sample.text

答え3

sedこれを行うには、次のように使用します。

SHW@SHW:/tmp $ cat a
this is line one
and this is line two
the third and the
fourth must be pasted too

SHW@SHW:/tmp $ sed 'N;s/\n/ /' a -i

SHW@SHW:/tmp $ cat a
this is line one and this is line two
the third and the fourth must be pasted too

答え4

別の方法は、次のものを使用することですxargs

$ < txt xargs -d '\n' -n 2 echo
this is line one and this is line two
the third and the fourth must be pasted too

どこ

$ cat txt
this is line one
and this is line two
the third and the
fourth must be pasted too

ただし、このソリューションは各行がプロセスを実行するため、やや過剰ですecho。したがって、おもちゃの例とは別に、awk / sedまたは同様のベースソリューションを好む必要があります。

関連情報