如何根据字段的一部分对文件进行排序


11

我想对文件进行排序:

   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
     F91HE*-K92HA      7.242      3.910   4.88e+04 -- 

并得到这个

   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
   F91HE*-K92HA      7.242      3.910   4.88e+04 -- 
   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 

即,按数字对行上第一个非空白序列的第二个和后续字符进行排序。


显然,编辑器没有保留我用于文件的格式
。...– edith

您是否尝试过该sort命令?
埃里克·雷诺夫

是的,但是显然我不知道您如何正确使用它....我尝试了:sort -b + 0.1n -1但也尝试了-n -k1,1 -k1,4(还有更多其他),但是没有一个这些工作
伊迪丝

1
您要根据第二个字符开头的数字排序吗?
pfnuesel

究竟。问题在于文件中的第一个字段之前有不同数量的空白
edith

Answers:


19
sort -k 1.2bn < file

st字段的nd字符开始nkey 上进行UM 排序,而忽略前导斜线(并在行的结尾处结束,但是对于仅考虑十进制数字的初始序列的数字排序,这无关紧要)。21b

请注意,如果有平局,例如这两行之间:

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

然后,该顺序将基于最后一次排序排序,该排序将两行完全比较为字符串。

在某些语言环境中,在比较字符串时,空格将首先被忽略,在这种情况下,F91将在K92之前(如F之前的排序K)。与其他在C语言环境中一样,空格将不被忽略,然后K92将出现在F91之前(空格在之前排序F)。

对于无论区域设置如何都将忽略前导空格的最后一种排序,您可以执行以下操作:

sort -k 1.2bn -k 1b < file

1b单词将在以第一个字段开头的行部分上按词法排序(取决于第一个键),而忽略前导空格。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.