異なる列を順番に並べ替えるか、複数の列を一度に並べ替える

異なる列を順番に並べ替えるか、複数の列を一度に並べ替える

sort -t' ' -k1,1n -k2,2nとの違いは何ですかsort -t' ' -k1,2n?

例を挙げていただけますか?

私はもう試した:

logan@logan-mainPC:~/my-test/learn-sort$ cat myage 
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,3
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,2 -k3,3
my age 1
my age 100
my age 2
my age 200
logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,2 -k3,3n
my age 1
my age 2
my age 100
my age 200

sort -k2,3'age 1'、'age 100'、... をソートし、 'age'、'age'、...、次に '1'、'100'、... をソートすると思いますsort -k2,2 -k3,3。これらはすべて列を文字列として扱うため、同じ結果が生成されます。

しかしsort -k2,2 -k3,3n、列 3 を数値として扱うため、異なる結果が生成されます。

しかしその後:

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort -k2,3n
my age 1
my age 100
my age 2
my age 200

奇妙ですね。理由は、列 2 が数字ではないためだと分かりました。

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -k2,3n
sort: using ‘en_AU.UTF-8’ sorting rules
sort: key 1 is numeric and spans multiple fields
my age 1
   ^ no match for key
________
my age 100
   ^ no match for key
__________
my age 2
   ^ no match for key
________
my age 200
   ^ no match for key
__________

ありがとう。

答え1

フラグによって何が起こっているかがわかります--debug

sort -k2,3実際には、「年齢 1」、「年齢 100」、... のように並べ替えられます。

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,3
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
   _____
________
my age 100
   _______
__________
my age 2
   _____
________
my age 200
   _______
__________

sort -k2,2 -k3,3「年齢」、...「1」、「100」、... の順に並べ替えます。

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,2 -k3,3
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
   ___
       _
________
my age 100
   ___
       ___
__________
my age 2
   ___
       _
________
my age 200
   ___
       ___
__________

最後に

logan@logan-mainPC:~/my-test/learn-sort$ cat myage | sort --debug -t' ' -k2,2 -k3,3n
sort: using ‘en_AU.UTF-8’ sorting rules
my age 1
   ___
       _
________
my age 2
   ___
       _
________
my age 100
   ___
       ___
__________
my age 200
   ___
       ___
__________

3 列目を数値として扱います。

関連情報