如何理解'sort -uk 4n -uk 6n -uk 9n','sort -uk 4 -uk 6 -uk 9'和'sort -uk 4,4 -uk 6,6 -uk 9,9'之间的区别?

时间:2019-02-04 15:12:05

标签: bash

我拥有大量的具有不同列号的数据。我只想输出11列的数据,并按4、6和9列进行排序。如果我使用

awk NF==11 17144_bondlength.dat |sort -uk 4 -uk 6 -uk 9

awk NV==11 17144_bondlength.dat |sort -uk 4,4 -uk 6,6 -uk 9,9

我无法得到想要的东西。如果我使用

awk NF==11 17144_bondlength.dat |sort -uk 4n -uk 6n -uk 9n

我能得到我想要的。在这里,17144_bondlength.dat是文件名。

我的问题是如何在三个命令下?任何进一步的评论将不胜感激。

1 个答案:

答案 0 :(得分:3)

正如在sort帮助中所说的那样,键定义上的n表示它将对键应用该排序顺序,而不是默认的或指定的排序顺序。 n表示数字(而不是字典式)。

  

我的问题是如何在这三个命令下执行?

-k的操作数为KEYDEF。这是帮助说明的内容:

  

KEYDEF对于开始和结束位置为F [.C] [OPTS] [,F [.C] [OPTS]],   其中F是字段编号,C是字段中的字符位置;   两者都是原点1,并且停止位置默认为行的结尾。   如果-t和-b均无效,则计算字段中的字符   从前面的空白开始。 OPTS是一个或多个   单字母排序选项[bdfgiMhnRrV],该选项覆盖全局   该键的订购选项。如果没有给出键,则使用整个键   行作为关键

(我的重点)

订购选项-n为:

  

-n,--numeric-sort

     

根据字符串数值进行比较

这告诉我们关于这三个sort的信息:

sort -uk 4 -uk 6 -uk 9

按三个键排序:

  • 键从第4列开始并持续到行尾(因为该行尾默认为行尾)
  • 从第6列开始一直到行尾的键
  • 从第9列开始一直到行尾的键

这三个都使用默认排序。

sort -uk 4,4 -uk 6,6 -uk 9,9

按三个键排序:

  • 从第4列开始到第4列结束的键
  • 从第6列开始到第6列结束的键
  • 从第9列开始到第9列结束的键

这三个都使用默认排序。

sort -uk 4n -uk 6n -uk 9n

与上面的第一个相同(键从4、6和9开始,但一直到行尾),但是使用数字排序。

如果要按数字对单个字符进行排序,则可能需要-uk 4,4n(对于6,6和9,9也是一样)。