按第一列对逗号分隔文件进行排序,同时保留一些顺序


1

我有一个表格的文件:

kl2,LL
kl2,nan
kl2,MORE
kl2,PRQ
kl2,JJ
abc87,PRQ
abc87,JJ
abc87,nan
abc87,MORE
abc87,LL
...

我希望通过第一列对此进行排序,同时将第二列按其当前顺序排列(对于与第一列对应的该块)。我想要的输出看起来像这样:

abc87,PRQ
abc87,JJ
abc87,nan
abc87,MORE
abc87,LL
kl2,LL
kl2,nan
kl2,MORE
kl2,PRQ
kl2,JJ

我试图对此进行排序 sort test.im -t, -k1 (以及其他一些变体)但是每次尝试总是对第二列进行排序,输出最终看起来像这样:

abc87,JJ
abc87,LL
abc87,MORE
abc87,nan
abc87,PRQ
kl2,JJ
kl2,LL
kl2,MORE
kl2,nan
kl2,PRQ

Answers:


2

使用GNU排序,添加 --stable 选项。这“通过禁用最后的比较来稳定排序”。也改变 -k1-k1,1

sort test.im -t, -k1,1 --stable

对不起 - 我可能应该提到我已经尝试过(并且只是再次测试)。我仍然看到第二列按字母顺序排序。
anthr

@anthr这是正确的方向。对于您的示例数据,请尝试稍作更改 -k1,1。对于您的真实数据,您可能需要尽可能多的数据 1 s,因为有实际的列。
Ouroborus

-k1,1是解决方案!非常感谢 - 我现在试着去理解为什么。
anthr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.