unix sort -s选项似乎被忽略了

时间:2012-10-10 18:11:42

标签: file unix sorting

我正在尝试在前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选项会在密钥耗尽后阻止对其余行进行排序。

我在哪里错了?

顺便说一下,它似乎可以在较小的文件上正常工作。

1 个答案:

答案 0 :(得分:0)

排序键指定为-k <start>[,<end>]。如果未指定<end>,则使用的密钥是从<start>到行尾,这有点不直观。你可能想要更像这样的东西:

sort -k1,1bn -k2,2n -s -t$'\xF1' -o sorted_file file_to_sort

请注意,这些键指定单个字段,而不是默认的“所有字段从......开始直到行尾”。