CSVファイルを並べ替えると予期しない結果が発生する

CSVファイルを並べ替えると予期しない結果が発生する

以下のように4つの列を持つCSVファイルがあり、bash端末でファイル名を入力します。

Sile,Barhams,Female,[email protected]
Shae,Scotti,Male,[email protected]
Shae,Bonham,Female,[email protected]
Shay,Ert,Female,[email protected]
Simeon,Dearle,Male,[email protected]

希望の出力は次のとおりです。

Shae,Male
Shae,Female
Shay,Female
Sile,Female
Simeon,Male

今、私は次のコードを試して、次のような結果を得ました。

cat $file | cut -d, -f1,3 | sort -k 1,1 -s

Shae,Female
Shae,Male
Shay,Female
Sile,Female
Simeon,Male

cat $file  | cut -d, -f1,3 | sort -k 1,1 -s -n

Sile,Female
Shae,Male
Shae,Female
Shay,Female
Simeon,Male

誰かが私の2つの作品を説明し、希望の作品を入手する方法を説明できますか?私によると、最初の列に基づいてソートする最初のコードがあり、同じレートがある場合は、目的の出力を得るために安定したソートを指定しましたが、問題が何であるかわかりません。 2番目のコードで知りたいです。 「Sile」が上部にどのように現れるか。

ベストアンサー1

cat $file | cut -d, -f1,3 | sort -k 1,1 -s

Shae,Female
Shae,Male
Shay,Female
Sile,Female
Simeon,Male

-kフィールドが次を参照しているので、アイデアを得ることができます。スペースが分離されましたデフォルトでは、フィールドはShae,Female前にソートされますShae,Male

-tカンマを区切り文字として使用するように指示するオプションが必要です。

-t--field-separator=SEP
空白ではなく空白の代わりに SEP を空白に切り替えるために使用

$ cat "$file"  | cut -d, -f1,3 | sort -t, -k 1,1 -s
Shae,Male
Shae,Female
Shay,Female
Sile,Female
Simeon,Male

cat $file  | cut -d, -f1,3 | sort -k 1,1 -s -n

Sile,Female
Shae,Male
Shae,Female
Shay,Female
Simeon,Male

ここでは、-nデータの数値に基づいてソートされます。しかし、ここには数値文字列はありません。数値以外のすべての文字列はゼロとして扱われます。したがって、実際には基本的な順序ルールはありません。使用すると、-s順序はそのまま残ります。それ以外の場合は、-sテキストsortの並べ替えに戻ってインポートします。一部結果。

おすすめ記事