我拥有大量的具有不同列号的数据。我只想输出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是文件名。
我的问题是如何在三个命令下?任何进一步的评论将不胜感激。
答案 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
按三个键排序:
这三个都使用默认排序。
sort -uk 4,4 -uk 6,6 -uk 9,9
按三个键排序:
这三个都使用默认排序。
sort -uk 4n -uk 6n -uk 9n
与上面的第一个相同(键从4、6和9开始,但一直到行尾),但是使用数字排序。
如果要按数字对单个字符进行排序,则可能需要-uk 4,4n
(对于6,6和9,9也是一样)。