Linuxで特定の列をソートしようとしています。

Linuxで特定の列をソートしようとしています。

私は私が持っているいくつかのデータを使って特定の列をソートしようとしました。

ID Name Last Grade      
123 Bill Holy A   
747 Chloe Crown B    
757 Aaron Farmer D    
365 Gray Billson

他のすべてのデータはそのままで、最初の列(ID)を数値順に並べ替え、2番目の列(名前)をアルファベット順に列ごとに並べ替えます。完全なコマンドでこれを実行したいと思います。これまでに試したことは、 sort -k1,1 -k2,2 [filename]最初の列を数値順に並べ替えるだけですが、2番目の列(名前)は変更もソートもされないようです。最後に、このコマンドを実行するとヘッダー(ID、名前、姓、グレード) 一番下に移動します。

答え1

例には固有のフィールド1の値(ID番号)が含まれているため、データがIDでソートされている場合、名前によるソートは機能しません。

ソーターはヘッダー行を探さずにファイル全体をソートします。

次のAwkプログラムはヘッダー行を印刷し、ソートのためにすべての後続の行を送信します。

awk '{if (NR==1) {print $0} {print $0 | "sort -k1,1 -k2,2"}}' <filename>

答え2

Gnu sedとソートの使用:

sed -z 'h;s/\n.*//;x;s/[^\n]*\n//;s/.*/echo "&"|sort -k1,1 -k2,2/e;x;G' infile

関連情報