我有一个非常简单的 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
我的命令或文件有什么问题吗?
我有一个非常简单的 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
我的命令或文件有什么问题吗?
你需要使用:
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.