Sort命令无法按预期工作

时间:2012-12-13 20:21:53

标签: shell

我有一个非常简单的3个字段的文本文件,每个字段用空格分隔,如下所示:

123 15 0
123 14 0
345 12 0
345 11 0

我发出了一个sort命令,按第一列排序:sort -k 1 myfile。但它并不仅仅排在第一列。它按整行排序,我得到以下结果:

123 14 0
123 15 0
345 11 0
345 12 0

我的命令或文件有什么问题吗?

2 个答案:

答案 0 :(得分:3)

您需要使用:

sort -k 1,1 -s myfile

如果您只想在第一个字段上排序。此语法指定用于排序的开始和结束字段。 sort -k 1表示从第一个字段开始到行尾。为了确保行与排序键相同的输入保持相同的顺序,您需要使用-s标志(GNU)的稳定排序。

请参阅sort(1)手册页:

KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
F is a field number and C a character position in the field; both are
origin 1, and the stop position defaults to the line's end.

info page

The --stable (-s) option disables this last-resort comparison so that
lines in which all fields compare equal are left in their original relative
order.

答案 1 :(得分:-1)

默认情况下,sort命令对整行进行排序。 您应该使用-k选项指定哪个列作为排序索引。