在Linux中优先按字母数字排序

时间:2018-10-17 04:40:16

标签: linux bash shell terminal sh

我想对文件进行字母数字排序,但优先考虑每个文件条目中的数字。示例:文件为:

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

2 个答案:

答案 0 :(得分:2)

因此,基本上,您要按降序对第一个字段进行数字排序,但是如果数字键相同,则希望第二个字段以 natural 或升序进行排序,订购。

我尝试了几件事,但这是我设法使其工作的方式:

   sort -nk2 file.txt  | sort -snrk1

说明:

  • 第一个命令使用第二个字母数字字段以自然顺序对整个文件进行排序,而第二个命令使用第一个数字字段对输出进行排序,以相反的顺序显示输出,并要求其为“稳定” “排序。

  • -n用于数字排序,而字母数字则是60之前的6。

  • -r用于倒序,因此从最高到最低。如果未指定,它将采用自然的或升序的顺序。
  • -k用于排序的或字段。
  • -s进行稳定订购。此选项维护具有相同键的记录的原始记录顺序。

答案 1 :(得分:1)

不需要管道或它产生的其他子外壳。对于两个字段keydef1只需使用2即可:

$ 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