Unix マルチ列ソートの問題

Unix マルチ列ソートの問題

ファイルを並べ替えようとしています。

TX001;A0004|Number|5|0|Y|1        
TX001;A0110|VARCHAR|5|0|Y|4         
TX001;A1332|VARCHAR|15|0|Y|3         
TX001;B3321|VARCHAR|15|0|Y|5         
TX001;C1321|VARCHAR|15|0|Y|2      
TY001;A1234|Number|5|0|Y|3        
TY001;C2335|VARCHAR|5|0|Y|1        
TY001;B2133|VARCHAR|15|0|Y|2        
TZ001;A1234|Number|5|0|Y|3    
TZ001;A2133|VARCHAR|5|0|Y|1  
TZ001;C0133|VARCHAR|15|0|Y|2

予想される出力は次のとおりです。

TX001;A0004|Number|5|0|Y|1   
TX001;C1321|VARCHAR|15|0|Y|2   
TX001;A1332|VARCHAR|15|0|Y|3  
TX001;A0110|VARCHAR|5|0|Y|4  
TX001;B3321|VARCHAR|15|0|Y|5  
TY001;C2335|VARCHAR|5|0|Y|1  
TY001;B2133|VARCHAR|15|0|Y|2  
TY001;A1234|Number|5|0|Y|3  
TZ001;A2133|VARCHAR|5|0|Y|1      
TZ001;C0133|VARCHAR|15|0|Y|2  
TZ001;A1234|Number|5|0|Y|3

最後の数値列に基づいてソートする必要があります。 sort を使用しようとすると、-n最初の列の順序が変更されます。

を試しましたが、sort -t "|" -k 6,6n FNAM.txt数値のソートのため、最初の列の順序が変更されました。

テーブル名の最初の列は、影響を受けずに最後の列に基づいて数値順にソートする必要があります。

ベストアンサー1

何でもPOSIX互換 sort:

sort -t"|" -k1,1.6 -k6n file
  • -t"|"区切り記号をに設定します|
  • -k1,1.6最初のフィールドを最初から6番目の文字まで並べ替えます。1
  • -k6n次に、6番目のフィールドを数値順に並べ替えます。

1マンページから:

POS is F[.C][OPTS], where F is the field number and C the character position in the field;

おすすめ記事