2016-03-28 9 views
0

UNIX sortユーティリティの-uオプションを使用して、特定のサブセットの列に基づいて一意の行を取得することができます。 sort -u -k1,1 -k4,4UNIX sort unique firstを保証する保証

私はUNIX sortとGNU sortドキュメントで広範囲に見ている、と私は-uオプションが指定されたキーによってソート後(uniqユーティリティなど)最初インスタンスを返します任意の保証を見つけることができません。

実際には(キーでソートしてから各ユニークキーの組み合わせの最初のインスタンスを作成する)必要に応じて動作するようですが、私のパラノイアを安易に置くためにドキュメンテーションで何らかの保証を期待していました。

誰もそのような保証を知っていますか?

+1

あなたが気に入っていると思うように働くのであれば 'uniq'を使わないのはなぜですか?_e.g._' uniq ... |並べ替え| ...? – Castaglia

+0

良い点ですが、 'uniq'は全行でしか動作しません。しかし、列のサブセットに対して 'sort -u'を使うことができます。 – cmo

+0

ああ、そうです。おそらく 'cut -f 1,4 |ユニーク|並べ替え| ... '、_i.e._あなたが興味を持っている列を得るために 'cut'を使いますか? – Castaglia

答えて

1

このような小さなユーティリティのコードは、おそらくそのような保証を見つけることができる場所だと思います。どのように動作しているかを確認したい場合は、デバッグ出力をさらに有効にすることができます。

GNU sortのコードを調べると、すべてのソートが完了した後、ソートプロセスで作成された一時ファイルのソートされた内容を反復処理しているときに、一意性テストが行​​われるように見えます。

これは、savedlinesmallestとを比較するwhile loopで発生します。これは出力される次の最小入力行です。

私の意見では、ソート基準を最初に処理し、最後のステップで出力を一意にすることになります。

+0

それは本当です。しかし、マニュアルページやどこかで保証されていない場合、将来的に 'sort 'の「更新」の際にコードが変更され、もはや真実ではないということは技術的に可能です。 – cmo

+0

あなたの答えは保証がないということです。これは実装の詳細です。 –