その行の値が次の行と異なる場合、テキストファイルに新しい行を追加するコマンドはありますか?

その行の値が次の行と異なる場合、テキストファイルに新しい行を追加するコマンドはありますか?

sort -nを使用してソートされたファイルがあります。ところで、gnuplotでサーフェスプロットを描画するには、最初の列の値が異なる行の間に空の行が必要です。例えば

1.0
1.0
1.1
1.1

到着する:

1.0
1.0

1.1
1.1

Ubuntu Linuxを使用してこれを簡単に行う方法はありますか?

答え1

私は次のように書きます:

awk 'NR > 1 && $0 != last {print ""}
     {print; last = $0}' < your-file

行が数字で構成されている限り$0 != last数字orまたはorと同じように比較します1.0(必ずしも0x1である必要はありませんが、小数点区切りの処理(1.0対1,0)に対するロケールの潜在的な影響も参照)。語彙比較を保証するには、に変更してください。11e01.00$0 "" != last

awk実装に応じて、これは(memcmp()バイトとバイトの比較)、 (strcmp()同じですがNULバイトを扱うことはできません)、strcoll()(両方の文字列は同じように並べ替え)、またはwcsncmp()(バイトと単語のセクションではなく文字と文字)を適用します。 )比較(入力に10進数とピリオド文字のみが含まれている場合はすべて同じでなければなりません)。

バイト間の比較を強制するには、ロケールをCに変更します。

LC_ALL=C awk 'NR > 1 && $0 "" != last {print ""}
              {print; last = $0}' < your-file

(また、いくつかのawk実装ではNUL文字をブロックします)。

答え2

次の操作が実行されます。

awk 'BEGIN {A=""} {if ($0!=A) { printf "\n%s\n", $0; A=$0} else print $0}'

Aの初期化値を選択するときは、既存の値に属さないように注意してください。

関連情報