按第三列排序,保留第一列和第二列(在linux中)

use*_*246 17 unix linux sorting command-line

我需要按第三列排序一个平面文件,保留第一列完整[第一列已经排序](在linux中).(第二栏可能会改变)

示例i/p文件: -

b:di:wave
b:di12:red
b:di12:wave
b:di06:pir
Run Code Online (Sandbox Code Playgroud)

应该是这样的: -

b:di06:pir
b:di12:red
b:di12:wave
bast:di:wave
Run Code Online (Sandbox Code Playgroud)

我尝试了几种排序选项,但我只能通过第二列而不是第三列排序.

有人可以帮忙吗?

Lev*_*von 37

试试这个:

sort  -t: -k1,1 -k3 data.txt
Run Code Online (Sandbox Code Playgroud)

得到:

bast:disp-san-d5-06:piranha 
bast:display-san-12:redbird
bast:display-san-07:waverider
bast:display-san-12:waverider
Run Code Online (Sandbox Code Playgroud)

这将按第一个字段作为主键,第三个字段作为二级键,将行拆分为字段 :

细节:

data.txt 包含帖子中的4行.

您可以指定多个字段作为排序键,请参见手册页

-k1,1表示对第一个字段进行排序(从字段1开始到字段1结束,否则它将继续使用该行的其余部分来确定排序)

-k3表示在第3个字段上排序为辅助密钥.由于没有其他领域,因此没有必要指定,-k3,3但也不会有任何损害.

-t:表示用:字符分隔行中的字段,否则默认使用空白

更多信息请参阅此SO问题使用Unix排序排序手册页排序多个键

  • 再加上1个细节! (6认同)