4

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

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

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

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

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

4

1 回答 1

6

你需要使用:

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.

信息页面

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.
于 2012-12-13T20:47:42.353 回答