私が得る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