edi*_*ith 11 text-processing sort files
我想对文件进行排序:
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 --
Run Code Online (Sandbox Code Playgroud)
得到这个
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 --
Run Code Online (Sandbox Code Playgroud)
也就是说,对行上第一个非空白序列的第二个和后续字符进行数字排序。
Sté*_*las 19
sort -k 1.2bn < file
Run Code Online (Sandbox Code Playgroud)
从st字段的nd字符开始,忽略前导lanks(并在行尾结束,但这对于仅考虑十进制数字的初始序列的数字排序n
无关紧要)在k
ey上进行数字排序。2
1
b
请注意,如果有平局,例如在这两行之间:
F91HE*-K92HA 7.242 3.910 4.88e+04 --
F91HE*-F91HZ 7.237 7.122 7.85e+05 --
Run Code Online (Sandbox Code Playgroud)
然后,该顺序将基于将两行完全作为字符串进行比较的最后排序。
对于某些语言环境,在比较字符串时首先会忽略空格,在这种情况下,F91 将位于 K92 之前(作为F
之前的排序K
)。对于 C 语言环境中的其他语言,空格不会被忽略,然后 K92 将位于 F91 之前(空格在 之前F
)。
对于不管语言环境如何都会忽略前导空格的最后一种排序,您可以执行以下操作:
sort -k 1.2bn -k 1b < file
Run Code Online (Sandbox Code Playgroud)
那1b
将在以第一个字段开头的行的部分按词法排序(根据第一个键的关系)忽略前导空格。