【问题标题】:Sorting 1 before 10 in bash在 bash 中将 1 排序到 10 之前
【发布时间】:2012-06-28 13:13:30
【问题描述】:

我正在对; 分隔文件的特定列进行数字排序:

sort -k3n file

但是数字 10 和 11 排在 1 之前。我该如何解决这个问题?

【问题讨论】:

  • 请显示失败的示例输入和输出文件
  • 为我工作。您确定要排序的数字是每行的第三个字符吗?你能提供一些示例数据吗?
  • 这在我身边工作得很好。你确定你没有输入错误的列号或一些排序无法识别的奇怪分隔符吗?
  • 文件是';'分开。但不适用于我,也适用于一般数字排序
  • 你应该在问题中提到这一点:)

标签: bash sorting


【解决方案1】:

如果您的字段用空格以外的其他内容分隔,您可以使用--field-separator-t 选项,如下所示:

sort -k3n -t\; file

【讨论】:

  • @g256:您可能还需要指定(一次)只考虑一个字段进行排序:sort -k3,3n -t ';'
  • @Dennis Williamson:实际上问题有点复杂,因为我使用“sort -k 1,1 -k 3,3n -t\ file”沿着两列(按字母顺序排列第一列)进行排序。似乎有效。
  • @g256:这就是我说“(一次)”的原因。例如,如果有第四列,并且您没有指定停靠点(,3),那么第四列(及后续列)将包含在排序条件中。
【解决方案2】:

-n 选项应该可以解决问题。你能检查一下这没有输出你想要的顺序吗?

echo -e "1\n10\n11\n2"|sort -n

【讨论】:

  • 必须;)这个例子不使用多个用分号分隔的字段;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多