ソートコマンド - csvで数値ソートが機能しない

ソートコマンド - csvで数値ソートが機能しない

LinuxのGNUは、sort私のcsvファイルに期待される結果を提供しません。この状況/問題を解決するのに役立ちますか?

入力ファイル

[nscruser]$ cat cemp1.txt
10,30
50,900
20,1050

目的上記のファイルの最初のフィールドを数字でソートする必要があります。

[nscruser]$  sort -t',' -k1 -n cemp1.txt
10,30
50,900
20,1050

期待される出力ただし、最初の列を数字で並べ替えるので、次のような出力が期待されます。

10,30
20,1050
50,900

なぜ違いが発生するのか教えてもらえますか?

ベストアンサー1

sortマニュアルページ(GNU coreutils 8.32)を見ると、

-k、--key = KEYDEFキーによるソートKEYDEFは場所とタイプを提供します。

...

KEYDEF は開始位置と停止位置を表す F[.C][OPTS][,F[.C][OPTS]] です。ここで、Fはフィールド番号、Cはフィールドの文字位置です。どちらも原点1で、停止位置はデフォルトで行末に設定されます。 -t と -b の両方が有効でない場合、フィールドの文字は前のスペースの先頭から計算されます。 OPTSは、このキーのグローバルソートオプションをオーバーライドする1つ以上の単一文字ソートオプション[bdfgiMhnRrV]です。キーが指定されていない場合は、行全体がキーとして使用されます。無効なキーの使用を診断するには、--debugを使用してください。

まず、--debug提案どおりに使用できます。

$ sort -t',' -k1 -n --debug cemp1.txt
sort: text ordering performed using ‘en_IE.UTF-8’ sorting rules
sort: key 1 is numeric and spans multiple fields
10,30
_____
_____
50,900
______
______
20,1050
_______
_______

これは私たちに手がかりを与えます。 「キー1は数字で、複数のフィールドにまたがっています。」

マニュアルページには、「停止位置はデフォルトで行末に設定されています」と記載されています。したがって、停止位置を追加する必要があります。

$ sort -t',' -k1,1 -n cemp1.txt
10,30
20,1050
50,900

おすすめ記事