2行の間に空白行が1つしかない場合は空白行を削除し、空白行が2つある場合は空白行を1つだけ削除します。

2行の間に空白行が1つしかない場合は空白行を削除し、空白行が2つある場合は空白行を1つだけ削除します。

私が得るdb2出力は次のとおりです。

this    is    testing  1

this    is    testing   2


this    is      testing 4

db2は、照会の出力として出力を提供し、照会にデータがない場合は空の行を提供します。

各出力の後に追加の空行を削除したいと思います。

sed -i '/^$/d' file.txt空白行を削除することが可能であることを知っています。データを含む各行の後に空の行を1つ削除する方法はありますか?

希望の出力は次のとおりです。

this    is    testing  1
this    is    testing   2

this    is      testing 4

答え1

これは、特定の文字の後の改行文字のみを削除します(テキスト行の後の最初の改行文字のみを削除します)。

 sed -n '$!N;s/\(.\)\n/\1/;P;D' file

答え2

ファイルがメモリに入るほど小さい場合は、次のコマンドを使用してファイルを削除perlし、スペース以外の文字とは異なる改行の後の改行を削除できます。

$ perl -0pe 's/(\S\n)\n/$1/g' file 
this    is    testing  1
this    is    testing   2

this    is      testing 4

答え3

$ awk '{ print; if (length) getline }' file
this    is    testing  1
this    is    testing   2

this    is      testing 4

結果に内容がある場合は、結果を印刷し、その後の空行を読みます。空の結果の場合、追加の行はスキップされません。

複数の連続した空の行は、複数の連続した空の結果がある場合にのみ印刷されます。結果ごとに1行だけ出力します(空または空ではありません)。

$ cat file
this    is    testing  1

this    is    testing   2



this    is      testing 5

$ awk '{ print; if (length) getline }' file
this    is    testing  1
this    is    testing   2


this    is      testing 5

答え4

Awkを使用すると、レコード区切り文字を二重改行文字に設定し、デフォルトの単一改行出力レコード区切り文字を使用して各レコードを印刷できます。

POSIX Awkを使用すると、最後のレコードの後に​​追加の改行が発生します。 GNU Awk(gawk)がある場合は、実際の入力レコード区切り文字が空のときに空の出力レコード区切り文字を設定することでこれを防ぐことができます。

$ gawk -vRS='\n\n' 'RT=="" {ORS=""} 1' file.txt
this    is    testing  1
this    is    testing   2

this    is      testing 4

関連情報