2番目、次に最初の2つのフィールドで並べ替えようとしています

ハリー

複数の列で並べ替えようとしています。結果は期待どおりではありません。

これが私のデータ(people.txt)です:

Simon Strange 62
Pete Brown 37
Mark Brown 46
Stefan Heinz 52
Tony Bedford 50
John Strange 51
Fred Bloggs 22
James Bedford 21
Emily Bedford 18
Ana Villamor 44
Alice Villamor 50
Francis Chepstow 56

以下は正しく機能します。

bash-3.2$ sort -k2 -k3 <people.txt                                                                                                                    
Emily Bedford 18                                                                                                                                      
James Bedford 21                                                                                                                                      
Tony Bedford 50                                                                                                                                       
Fred Bloggs 22                                                                                                                                        
Pete Brown 37                                                                                                                                         
Mark Brown 46                                                                                                                                         
Francis Chepstow 56                                                                                                                                   
Stefan Heinz 52                                                                                                                                       
John Strange 51                                                                                                                                       
Simon Strange 62                                                                                                                                      
Ana Villamor 44                                                                                                                                       
Alice Villamor 50

ただし、以下は期待どおりに機能しません。

bash-3.2$ sort -k2 -k1 <people.txt                                        
Emily Bedford 18                                                                                                                                      
James Bedford 21                                                                                                                                      
Tony Bedford 50                                                                                                                                       
Fred Bloggs 22                                                                                                                                        
Pete Brown 37                                                                                                                                         
Mark Brown 46                                                                                                                                         
Francis Chepstow 56                                                                                                                                   
Stefan Heinz 52                                                                                                                                       
John Strange 51                                                                                                                                       
Simon Strange 62                                                                                                                                      
Ana Villamor 44                                                                                                                                       
Alice Villamor 50

名前、次に名で並べ替えようとしましたが、Villamorsの順序が正しくないことがわかります。家系の名前で並べ替えて、名前が一致したら名で並べ替えたいと思っていました。

これがどのように機能するかについては、私にはわかりません。もちろん(awkを使用して)これを別の方法で行うこともできますが、ソートについて理解したいと思います。

Mac OSXで標準のBashシェルを使用しています。

Gilles'SO-悪であることをやめなさい '

のような重要な仕様-k2は、2から行末までのすべてのフィールドを考慮に入れることを意味します。したがってVillamor 44、前に終了しVillamor 50ます。これら2つは等しくないため、の最初の比較でsort -k2 -k1これら2つの行を区別するのに十分であり、2番目のソートキー-k1は呼び出されません。2つのVillamorが同じ年齢だった-k1としたらそれらは名でソートされていたでしょう。

単一の列で並べ替えるには-k2,2、キー仕様として使用します。これは、#2から#2までのフィールド、つまり2番目のフィールドのみを使用することを意味します。

sort -k2 -k3 <people.txt冗長です:。と同等sort -k2 <people.txtです。姓、名、年齢の順に並べ替えるには、次のコマンドを実行します。

sort -k2,2 -k1,1 <people.txt

または同等にsort -k2,2 -k1 <people.txt、これらの3つのフィールドのみがあり、セパレーターは同じであるためです。実際、行のサブセット内のすべてのキーが同一である場合、最後の手段として行全体を使用するsort -k2,2 <people.txtため、から同じ効果が得られますsort

また、デフォルトのフィールドセパレータは非空白と空白の間の遷移であるため、キーには先頭の空白が含まれることに注意してください(この例では、最初の行の場合、最初のキーはになります"Emily"が、2番目のキーになります" Bedford"-bそれらの空白を取り除くオプション:

sort -b -k2,2 -k1,1

bキー開始仕様の最後にフラグを追加することにより、キーごとに実行することもできます

sort -k2b,2 -k1,1 <people.txt

ただし、覚えておくべきことがあります。そのようなフラグをキー仕様に1つ追加するとすぐに、グローバルフラグ(-n-r...など)は適用されなくなるため、キーごとのフラグとグローバルフラグを混在させないようすることをお勧めします

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2番目のフィールドに基づいてソートし、最初の列が同じである行を並べ替えますが、各グループの2番目のフィールドの順序は維持します

分類Dev

1つのフィールドを降順で並べ替えてから、2番目のフィールドで昇順で並べ替えますか?

分類Dev

2つのフィールドで並べ替えますが、2番目はPHPの条件によって異なります

分類Dev

最初に2つのフィールドで並べ替えを試みることは、2番目の基準です

分類Dev

mysqlは最初のフィールドで並べ替え、その後2番目のフィールドで並べ替えます

分類Dev

field1、field2に基づいて並べ替えますが、フィールド1の並べ替えは保持し、2番目の並べ替えではnull /空白を無視します

分類Dev

2番目のフィールドで並べ替え

分類Dev

2D配列を最初の列で並べ替え、次に2番目の列で並べ替えます

分類Dev

2つのテーブルを結合し、2番目のテーブルのフィールドで並べ替えます。重複はありません。

分類Dev

1つの値(状態)が常に最後になるようにテーブルを並べ替え、2番目の値(時間)で並べ替えます

分類Dev

最初の要素が等しい場合、並べ替えが最初の要素で「<」、2番目の要素で「>」になるように、priority_queueをペアで作成します

分類Dev

Javaで2つのフィールドで並べ替え、並べ替えの方向を指定するにはどうすればよいですか?

分類Dev

ペアのベクトルをCのペアの最初の要素で並べ替え、次にペアの2番目の要素で並べ替えます

分類Dev

Linuxで最初の列と2番目の列をそのままにして、3番目の列で並べ替えますか?

分類Dev

2次元配列の配列を最初の次元で並べ替え、次に2番目の次元で並べ替えます

分類Dev

関連性の重みが異なる2つのフィールドに基づいてレコードをどのように並べ替えますか?

分類Dev

django-クエリの並べ替えを作成して、特定の要素を最初に配置し、次にいくつかのフィールドに残すにはどうすればよいですか?

分類Dev

1番目の2番目と3番目のフィールドが同じである場合、Sortまたは別のbashcmdを使用してすべての行から1行を取得するにはどうすればよいですか

分類Dev

最初の行で最大の番号を取得し、2番目の行で最小の番号を取得し、3番目の行で2番目に最大の番号を取得するようにグループを並べ替える方法など

分類Dev

最初の行で最大の番号を取得し、2番目の行で最小の番号を取得し、3番目の行で2番目に最大の番号を取得するようにグループを並べ替える方法など

分類Dev

最初の行で最大の番号を取得し、2番目の行で最小の番号を取得し、3番目の行で2番目に最大の番号を取得するようにグループを並べ替える方法など

分類Dev

2つのカスタムフィールドで並べ替えるときに、チャネルエントリがedit_dateで並べ替えられないようにするにはどうすればよいですか?

分類Dev

最初の列、次に2番目の列でファイルを並べ替える

分類Dev

バッチファイルを使用してテキストを並べ替えて合計するときに、最初と3番目のデータ列を無視するにはどうすればよいですか?

分類Dev

2つの配列をマージして降順で並べ替えようとしています

分類Dev

左側の結合の2つのテーブルには、両方ともidフィールドがあります。最初のデータベースからidフィールドをプルしようとしていますが、代わりに2番目のデータベースを取得しています

分類Dev

2つのフィールドで並べ替え、2番目は逆アルファベットのワンライナーです

分類Dev

pandas:2つの列でグループ化し、3番目の列の値で並べ替えます

分類Dev

2つのdivを並べて配置し、3番目のdivを2番目のdivに揃えるにはどうすればよいですか?

Related 関連記事

  1. 1

    2番目のフィールドに基づいてソートし、最初の列が同じである行を並べ替えますが、各グループの2番目のフィールドの順序は維持します

  2. 2

    1つのフィールドを降順で並べ替えてから、2番目のフィールドで昇順で並べ替えますか?

  3. 3

    2つのフィールドで並べ替えますが、2番目はPHPの条件によって異なります

  4. 4

    最初に2つのフィールドで並べ替えを試みることは、2番目の基準です

  5. 5

    mysqlは最初のフィールドで並べ替え、その後2番目のフィールドで並べ替えます

  6. 6

    field1、field2に基づいて並べ替えますが、フィールド1の並べ替えは保持し、2番目の並べ替えではnull /空白を無視します

  7. 7

    2番目のフィールドで並べ替え

  8. 8

    2D配列を最初の列で並べ替え、次に2番目の列で並べ替えます

  9. 9

    2つのテーブルを結合し、2番目のテーブルのフィールドで並べ替えます。重複はありません。

  10. 10

    1つの値(状態)が常に最後になるようにテーブルを並べ替え、2番目の値(時間)で並べ替えます

  11. 11

    最初の要素が等しい場合、並べ替えが最初の要素で「<」、2番目の要素で「>」になるように、priority_queueをペアで作成します

  12. 12

    Javaで2つのフィールドで並べ替え、並べ替えの方向を指定するにはどうすればよいですか?

  13. 13

    ペアのベクトルをCのペアの最初の要素で並べ替え、次にペアの2番目の要素で並べ替えます

  14. 14

    Linuxで最初の列と2番目の列をそのままにして、3番目の列で並べ替えますか?

  15. 15

    2次元配列の配列を最初の次元で並べ替え、次に2番目の次元で並べ替えます

  16. 16

    関連性の重みが異なる2つのフィールドに基づいてレコードをどのように並べ替えますか?

  17. 17

    django-クエリの並べ替えを作成して、特定の要素を最初に配置し、次にいくつかのフィールドに残すにはどうすればよいですか?

  18. 18

    1番目の2番目と3番目のフィールドが同じである場合、Sortまたは別のbashcmdを使用してすべての行から1行を取得するにはどうすればよいですか

  19. 19

    最初の行で最大の番号を取得し、2番目の行で最小の番号を取得し、3番目の行で2番目に最大の番号を取得するようにグループを並べ替える方法など

  20. 20

    最初の行で最大の番号を取得し、2番目の行で最小の番号を取得し、3番目の行で2番目に最大の番号を取得するようにグループを並べ替える方法など

  21. 21

    最初の行で最大の番号を取得し、2番目の行で最小の番号を取得し、3番目の行で2番目に最大の番号を取得するようにグループを並べ替える方法など

  22. 22

    2つのカスタムフィールドで並べ替えるときに、チャネルエントリがedit_dateで並べ替えられないようにするにはどうすればよいですか?

  23. 23

    最初の列、次に2番目の列でファイルを並べ替える

  24. 24

    バッチファイルを使用してテキストを並べ替えて合計するときに、最初と3番目のデータ列を無視するにはどうすればよいですか?

  25. 25

    2つの配列をマージして降順で並べ替えようとしています

  26. 26

    左側の結合の2つのテーブルには、両方ともidフィールドがあります。最初のデータベースからidフィールドをプルしようとしていますが、代わりに2番目のデータベースを取得しています

  27. 27

    2つのフィールドで並べ替え、2番目は逆アルファベットのワンライナーです

  28. 28

    pandas:2つの列でグループ化し、3番目の列の値で並べ替えます

  29. 29

    2つのdivを並べて配置し、3番目のdivを2番目のdivに揃えるにはどうすればよいですか?

ホットタグ

アーカイブ