如何按列对文本文件进行排序并保留原始顺序

Mar*_*yam 2 sorting

我有一个非常大的数据文件,有15列.我需要根据特定列对所有行进行排序,比如第11列.我在Linux中使用此命令:

sort -k11 -d myfile.txt > sortedfile
Run Code Online (Sandbox Code Playgroud)

问题是sort命令不保留文件的原始顺序.敌人,如果我有这样的事情:

1 mh3

3 ygb

4 mh3

I need to have:

1 mh3

4 mh3

3 ygb
Run Code Online (Sandbox Code Playgroud)

但是,我可能会得到:

4 mh3

1 mh3

3 ygb
Run Code Online (Sandbox Code Playgroud)

是否有任何选项可以保留原始订单或我可以使用的任何其他命令?

pio*_*kuc 6

选项-s是您所需要的(相当于--stable):

sort -k11,11 -d -s myfile.txt > sortedfile
Run Code Online (Sandbox Code Playgroud)

该选项-k适用于一系列字段,因此您应该,11像我上面那样添加,否则排序将使用从第11列到第11行的键(默认值).

  • 您可以使用sort的`-t`标志来指定分隔符.(好吧,游戏稍晚,但它可能会帮助其他读者). (2认同)
  • 我不知道“-k”的语法必须是“-k1,1”——我有“-k1”并且得到了错误的行为,直到我偶然发现了这个答案。 (2认同)