我一直在尝试使用我拥有的一些数据对特定列进行排序:
ID Name Last Grade
123 Bill Holy A
747 Chloe Crown B
757 Aaron Farmer D
365 Gray Billson
我试图逐列按数字顺序对第一列(ID)进行排序,按字母顺序对第二列(名称)进行排序,而所有其他数据则保持原样。我想用一个完整的命令来完成此操作。到目前为止,我已经尝试过
sort -k1,1 -k2,2 [filename]
,但所做的只是按数字顺序对第一列进行排序,但第二列(名称)似乎没有更改或已排序。最后,当我运行这个命令时,它生成了标题(ID、姓名、姓氏、年级)移至底部。
答案1
您的示例包含唯一的字段 1 值(ID 号),因此如果数据按 ID 排序,则随后按名称排序将不起作用。
排序程序对整个文件进行排序,而不查找标题行...
以下 Awk 程序打印标题行,并发送所有后续行进行排序。
awk '{if (NR==1) {print $0} {print $0 | "sort -k1,1 -k2,2"}}' <filename>
答案2
使用 gnu sed 和 sort :
sed -z 'h;s/\n.*//;x;s/[^\n]*\n//;s/.*/echo "&"|sort -k1,1 -k2,2/e;x;G' infile