私は私が持っているいくつかのデータを使って特定の列をソートしようとしました。
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