第二个条件是首先尝试对两个字段进行排序

第二个条件是首先尝试对两个字段进行排序

我正在尝试使用 GNU 排序对文件的多列进行排序。

源文件 tmp/file.txt 的格式为:

03A12345679   2014-09-30-00.00.01.00
  • “03” => 第一列
  • “A” => 字段分隔符
  • "12345679 " => 第二列
  • "2014-09-30-00.00.01.00" => 其他列(未排序)

我试过这个命令:

sort --field-separator="A" -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt

和 :

  • --field-separator="A"=> 字段分隔符是“A”
  • -k2,11=> 第二列是第一个排序(“12345679”)
  • -k1,2=> 第一列是第二个排序(“03”)

但结果排序不正确(“03”在“01”和“02”行之前):

03A12345679   2014-09-30-00.00.01.000000-0000
01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

我想要这样的结果:

01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
03A12345679   2014-09-30-00.00.01.000000-0000
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

我怎样才能做到这一点 ?

答案1

您似乎混淆了场位置和角色位置。没有必要分开A;使用 GNU 排序,您可以对第一个空格分隔字段中的一系列字符进行排序:

$ sort -k1.4,1.11 -k1.1,1.2 file
01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
03A12345679   2014-09-30-00.00.01.000000-0000
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

答案2

使用-g(按照一般数值比较)排序:

sort --field-separator="A" -g -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt

相关内容