テキストを処理するときは、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
ループを試しましたが、while
whileループは悪い習慣です。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または同様のベースソリューションを好む必要があります。