尝试对 Linux 中的特定列进行排序

尝试对 Linux 中的特定列进行排序

我一直在尝试使用我拥有的一些数据对特定列进行排序:

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

相关内容