我正在尝试使用 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