如何使用字母顺序对主列进行排序,然后使用数字顺序对辅助列进

Yun*_*ang 5 sorting bash shell

假设有一个文本文件:

10  A   QAZ
5   A   EDC
14  B   RFV
3   A   WSX
7   B   TGB
Run Code Online (Sandbox Code Playgroud)

我希望将第二列作为具有字母顺序的主列和第一列作为具有数字顺序的辅助列进行排序.以下是预期结果:

3   A   WSX
5   A   EDC
10  A   QAZ
7   B   TGB
14  B   RFV
Run Code Online (Sandbox Code Playgroud)

我尝试了sort -k 2,2 -k 1,1 a.txt -n,sort -k 2,2 -k 1,1 a.txt但都给出了错误的结果.我该怎么解决这个问题?谢谢.

cho*_*oba 9

这应该工作:

sort -b -k2,2 -k1,1n
Run Code Online (Sandbox Code Playgroud)

-b是必不可少的,没有它,输出是错误的,因为sort错误地确定了第二列的位置.有关详细信息,请参阅man sort (或此处).

另外,检查你的locale.他们可以影响sort工作方式.

  • 第二个字段说明符是不必要的.`sort -b -k2 -k1n`应该有效 (3认同)