我想对文件进行排序:
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 --
也就是说,对该行上第一个非空白序列的第二个及后续字符进行数字排序。
答案1
sort -k 1.2bn < file
n
以数字方式对ey进行排序,从st字段的第 ndk
字符开始,忽略前导空格(并在行尾结束,但这对于仅考虑十进制数字的初始序列的数字排序并不重要)。2
1
b
请注意,如果存在平局,例如这两行之间:
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
函数会在以第一个字段开头的行部分上按词法排序(根据第一个键上的关系),忽略前导空格。