Linuxの並べ替えで希望する結果が得られないのはなぜですか?
質問
以下のような内容のファイルa.csvがあります
a,b,c
a ,aa, a
a b, c, f
a , b, c
a b a b a,a,a
a,a,a
a aa ,a , t
sort -k1 -t、a.csv
を使用してソートしようとしています
しかし、次の結果が得られています
a,a,a
a ,aa, a
a aa ,a , t
a b a b a,a,a
a , b, c
a,b,c
a b, c, f
1列目の実際の並べ替えではありません。私は何を間違えていますか?
解決
終了位置も1に指定する必要があります:
sort -k1,1 -t, a.csv
他のヒント
試してみてください: sort -t、-k1,1 a.csv
男性は、終了フィールドを省略すると、フィールド n
から行末までのすべての文字でソートすることを提案します。
-k POS1[,POS2]'
The recommended, POSIX, option for specifying a sort field. The
field consists of the part of the line between POS1 and POS2 (or
the end of the line, if POS2 is omitted), _inclusive_. Fields and
character positions are numbered starting with 1. So to sort on
the second field, you'd use `-k 2,2' See below for more examples.
代わりにこれを試してください:
sort -k 1,1 -t , a.csv
sortは、 -k 1
を「最初のフィールドから先にソート」として読み取ります; quot; -したがって、引数を最初に渡すポイントを事実上無視します。
これは、ソートmanページに記載されており、例セクションで警告されています:
2番目のフィールドに数値で並べ替え 並べ替えによって関係を解決します 3番目と4番目にアルファベット順に フィールド5の文字。 「:」を使用 フィールド区切り文字:
$ sort -t:-k 2,2n -k 5.3,5.4
代わりに
-k 2
と書いた場合-k 2,2
のうち、sort
はすべてを使用していました 2番目から始まる文字 フィールドの終わりまで プライマリ数字キーとしての行。にとって 大多数のアプリケーション、 複数にまたがるキーの処理 数値としてのフィールドは何もしません 期待します。
所属していません StackOverflow