4

「ソート」は、次の 2 行が正しくないことを報告します。

> echo "a b\na a" | sort -c 
sort: -:2: disorder: a a 

各行の最初のフィールドのみを比較するように sort に指示するにはどうすればよいですか? 私は試した:

> echo "a b\na a" | sort -c -k1 
sort: -:2: disorder: a a 

しかし、上記のように失敗しました。

各行の最初のフィールドのみをソートして比較することはできますか、または比較する前に sed などを使用して行をトリミングする必要がありますか?

編集:「ソート (GNU coreutils) 7.2」を使用しています。別のフィールドセパレーターを使用してみましたが、役に立ちませんでした:

> echo "a b\na a" | sort -k1 -c -t" "
sort: -:2: disorder: a a

とにかく、スペースがデフォルトの区切り文字であると確信しています。

4

1 に答える 1

4

以下は期待どおりに機能します。

echo "a b\na a" | sort -s -c -k1,1

ソートの呼び出しには 2 つの問題がありました。

  • to の引数-kは、開始位置と終了位置を指定するキー定義です。終了位置が省略された場合、デフォルトでは、開始フィールドではなく、行の最後のフィールドになります。両方を指定し、比較に 2 番目のフィールドを含めないように-k1,1指示します。sort

  • sortデフォルトでは安定していません。つまり、比較が等しい行の順序を乱さないという保証はありません。ドキュメントの引用:

最後に、すべてのキーが等しい場合の最後の手段として、( )sort以外の順序付けオプションが指定されていないかのように、行全体を比較します。( ) オプションは、この「最終手段の比較」を無効にして、すべてのフィールドの比較が等しい行が元の相対順序のままになるようにします。--reverse-r--stable-s

于 2013-07-07T19:36:53.240 に答える