我想按字母数字对文件进行排序,但每个文件条目中的数字具有优先级。示例:文件为:
22 FAN
14 FTR
16 HHK
19 KOT
25 LMC
22 LOW
22 MOK
22 RAC
22 SHS
18 SHT
20 TAP
19 TAW
23 TWO
15 UNI
我想将其排序为:
25 LMC
23 TWO
22 FAN
22 LOW
22 MOK
22 RAC
22 SHS
20 TAP
19 KOT
19 TAW
18 SHT
16 HHK
15 UNI
14 FTR
因此,基本上,您要求按数字降序对第一个字段进行排序,但如果数字键相同,则希望第二个字段按自然或升序排序。
我尝试了一些方法,但这是我设法让它工作的方法:
sort -nk2 file.txt | sort -snrk1
解释:
第一个命令使用第二个字母数字字段按自然顺序对整个文件进行排序,而第二个命令使用第一个数字字段对输出进行排序,以相反的顺序显示它,并请求它是"稳定"排序。
-n
用于数字排序,而不是字母数字,其中 6 在 60 之前。-r
用于颠倒顺序,因此从最高到最低。 如果未指定,它将采用自然或升序。-k
用于排序顺序的键或字段。-s
用于稳定订购。 此选项维护具有相等键的记录的原始记录顺序。
不需要管道,也不需要它生成的附加子壳。只需对两个字段1
和2
使用keydef
即可:
$ sort -k1nr,2 file
示例/输出
$ sort -k1nr,2 file
25 LMC
23 TWO
22 FAN
22 LOW
22 MOK
22 RAC
22 SHS
20 TAP
19 KOT
19 TAW
18 SHT
16 HHK
15 UNI
14 FTR