
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 列目を数値として扱います。