-k 标志在排序命令中如何工作?

-k 标志在排序命令中如何工作?

我有一个这样的数据集:

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这样检查了两个命令的输出

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 进行排序对于最终顺序来说已经足够了。

第二种排序表示:首先对第 1 列排序到第 1 列(即仅 1),如果顺序仍然不清楚,则在第 3 列上排序。现在排序无法通过查看第 1 列找到顺序,它将按第 3 栏也是如此。

相关内容