在Linux中按第三列排序,保留第一和第二列不变?

20

我需要按照第三列对一个扁平文件进行排序,同时保持第一列不变(第一列已经有序)(在Linux中)。 (第二列可能会改变)

示例输入文件:

b:di:wave
b:di12:red
b:di12:wave
b:di06:pir

应该看起来像:

b:di06:pir
b:di12:red
b:di12:wave
bast:di:wave

我尝试了几种排序选项,但只能按第二列排序,而无法按第三列排序。

有人可以帮忙吗?


1
请编辑您的问题;不要将这个无法阅读的混乱放入评论中。 - Matt Ball
1个回答

42

试试这个:

sort  -t: -k1,1 -k3 data.txt

提供:

bast:disp-san-d5-06:piranha 
bast:display-san-12:redbird
bast:display-san-07:waverider
bast:display-san-12:waverider

这将以第1个字段作为主键,以第3个字段作为次要键对行进行拆分,并按:排序。
详情: data.txt 包含您发布的帖子中的4行。
您可以指定多个字段作为排序键,请参见man页面 -k1,1 意味着按第一个字段排序(从第1个字段开始到第1个字段结束,否则将继续使用其余行来确定排序) -k3 意味着将第三个字段作为次要键进行排序。由于后面没有其他字段,因此不必指定-k3,3,但这也无妨。 -t: 意味着在行中用:字符分隔字段,否则默认使用空白符。
更多信息请参见此Stack Overflow问题Sorting multiple keys with Unix sortsort man page

1
我认为这会破坏第一个字段的排序。即使输入已经按第一个字段排序,您仍需要按第1个、第3个字段进行排序。 - Pat
1
@Pat 我想这样就可以了 - 再次感谢你发现了这个问题..在给定的数据下,这个问题对我来说并不明显。 - Levon
7
加1分,因为细节非常好! - John Jiang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接