次のデータセットがあります。
manufacturer,model,year,mileage,price
plym fury 1970 73 2500
chevy malibu 1999 60 3000
ford mustang 1965 45 10000
volvo s80 1998 102 9850
ford thundbd 2003 15 10500
chevy malibu 2000 50 3500
bmw 315i 1985 115 450
honda accord 2001 30 6000
ford taurus 2004 10 17000
toyota rav4 2002 180 750
chevy impala 1985 85 1550
ford explor 2003 25 9500
製造元ごとにファイルを並べ替え、製造元の価格で並べ替える必要があります。
本では、このコマンドは次のことができると言います。
sort -t ' ' a -k1,1 -k5
私の質問は、上記のコマンドとこのコマンドの違いは何ですか?
sort -t ' ' a -k1 -k5
-k1
-k1,1
私は次のように2つのコマンドの出力を個別に確認しました。
sort -t ' ' a -k1,1
sort -t ' ' a -k1
どちらも同じです-k5
。どちらの場合も、追加時に出力が異なるのはなぜですか?
-k1
機能と機能-k1,1
の違いがよくわかりません。
誰もが与えられたデータセットの文脈を使ってこれを説明できますか?
答え1
マニュアルページには次のように記載されています。
-k, --key=POS1[,POS2]
start a key at POS1 (origin 1), end it at POS2 (default end of
line). See POS syntax below
つまり、指定しない場合は、次の列をすべて暗黙的に指定します。複数の列を指定した場合、ソートは前の列と同じ列でのみソートされます。
この例を見てください。
$ cat test
1 3 1
1 2 3
1 1 2
$ sort test -k 1 -k3
1 1 2
1 2 3
1 3 1
$ sort test -k 1,1 -k3
1 3 1
1 1 2
1 2 3
最初のソートは、列1、2、3を最初にソートし、同じ場合は列3をソートすることを意味します。最終的な順序は1,2,3でソートするだけで十分です。
2番目のソートは、最初に列1を列1にソート(つまり1のみ)し、順序がまだ明確でない場合は列3に基づいてソートすることを意味します。ソートでは、列1を表示して順序が見つからず、列3に基づいてソートされます。