2

我正在尝试对前 2 列的大(10mb)文件进行排序。该文件由 ASCII 241 (±) 分隔。问题是,在正确排序前 2 个数据字段后,无论是否包含 -s 选项,unix 都会继续对行的其余部分进行排序。

命令 :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 选项将阻止对其余字段进行排序键用完后的线路。

我在哪里错了?

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

4

1 回答 1

0

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

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

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

于 2012-10-10T18:43:12.660 回答