【问题标题】:The Sort command does not work as expected排序命令未按预期工作
【发布时间】:2020-05-23 10:32:57
【问题描述】:

我有一个非常简单的 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

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

【问题讨论】:

  • 但还是按第一列排序。你的预期输出是什么?
  • 它还对第二列进行排序,这是我不想要的。实际上它对整行进行排序,即使我指定了 -k1
  • 您文件中的数据已经按第一列排序了。
  • 我只是把我的数据的前几行。问题是它不仅按第一列排序,而且按整行排序。
  • @Annjawn 预期输出与输入相同

标签: shell


【解决方案1】:

你需要使用:

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.

【讨论】:

  • 仍然对第二列进行排序!
  • 在我的系统中显示sort: Not a recognized flag: s。它是一个 Unix 环境。
  • @Annjawn:那么看起来您的排序与-s 并没有进行稳定的排序。您需要安装 gnu,或者找到您的排序具有的另一个选项。顺便说一句,“unix 环境”对您的系统的描述非常模糊。
猜你喜欢
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2021-11-25
  • 2016-09-29
  • 2019-10-31
  • 1970-01-01
相关资源
最近更新 更多