我正在尝试在前2列上对大(10mb)文件进行排序。该文件由ASCII 241(±)分隔。问题是,在正确排序前2个数据字段后,unix将继续对该行的其余部分进行排序,而不管是否包含-s选项。
命令:sort -k1bn -k2n -s -t$'\xF1' -o sorted_file file_to_sort
示例数据:(相当有序,所以我可以突出显示问题)
6033718±2± 0±20817742
6033718±3±20817742
6033718±3±20862761
6033718±3±SRDV408BC
6033718±3±KFT474
6033718±3±941764
6033718±4±20817742
6033718±4±20862761
6033718±4±SRDV408BC
6033718±4±KFT474
6033718±4±941764
6033718±5±21501-0-06 ±D13 * TIMING
6033718±5±17003-0-01 ±VEHICLE OPER
6033718±6±21501-0-06 ±10 ±0±
6033718±6±17003-0-01 ±10 ±0±
6033718±9±I± === Applicable Coverage
6033718±9±I±Volvo D11/13/16 / TIMING
6033718±9±E±check for oil leak, insp
运行命令后,我得到:
6033718±2± 0±20817742
6033718±3±20817742
6033718±3±20862761
6033718±3±941764
6033718±3±KFT474
6033718±3±SRDV408BC
6033718±4±20817742
6033718±4±20862761
6033718±4±941764
6033718±4±KFT474
6033718±4±SRDV408BC
6033718±5±17003-0-01 ±VEHICLE OPER
6033718±5±21501-0-06 ±D13 * TIMING
6033718±6±17003-0-01 ±10 ±0±
6033718±6±21501-0-06 ±10 ±0±
6033718±9±E±check for oil leak, insp
6033718±9±I± === Applicable Coverage
6033718±9±I±Volvo D11/13/16 / TIMING
正如你所看到的,看着'3','4'和& '9'记录,他们对第二个字段后面的数据进行了排序,即使排序手册指出-s选项会在密钥耗尽后阻止对其余行进行排序。
我在哪里错了?
顺便说一下,它似乎可以在较小的文件上正常工作。答案 0 :(得分:0)
排序键指定为-k <start>[,<end>]
。如果未指定<end>
,则使用的密钥是从<start>
到行尾,这有点不直观。你可能想要更像这样的东西:
sort -k1,1bn -k2,2n -s -t$'\xF1' -o sorted_file file_to_sort
请注意,这些键指定单个字段,而不是默认的“所有字段从......开始直到行尾”。