【问题标题】:Linux Column Sort Function [duplicate]Linux列排序功能[重复]
【发布时间】:2015-10-22 17:34:55
【问题描述】:

我正在尝试按输入的列对包含 4 列的文件进行排序。无论 $field 的输入是什么,我下面的代码都只会根据第一列进行排序。

if (( sort ))
then
        if [ $field==1 ]
        then
                sort -k1 $file -o $file
        elif [ $field==3 ]
        then
                sort -k3 $file -o $file
        elif [ $field==4 ]
        then
                sort -k4 $file -o $file
        else #for field 2-- this is default
                sort -k2 $file -o $file
        fi
fi

【问题讨论】:

  • 这几乎正是tag wiki 中用来说明如何将坏问题变成好问题的问题。
  • (副本标记为ksh,但答案适用于此处。)

标签: linux bash sorting


【解决方案1】:

这可以更简单地完成:

if [ $field -lt 1 -o $filed -gt 4 ]; then
    filed=2
fi
sort -k$field $file -o $file

更新。如果field 包含数字,则以前的版本有效。 这是使用内置 bash 测试的新测试[[

if [[ ! $field =~ ^[0-9]+$ || $field < 1 || $field > 4 ]]; then
    filed=2
fi
sort -k$field $file -o $file

这里$field =~ '^[0-9]+$' 正在检查变量是否包含数字。

【讨论】:

  • 不要使用-o;请改用[ "$field" -lt 1 ] || [ "$field" -gt 4 ]
  • @chepner 为什么?我找到了this,其中-o/-a 被标记为可读性较差。也许我错过了什么?
  • 它们只是伪标准(它们是 POSIX 标准的可选扩展);它们并没有完全弃用,但 POSIX 标准认为它们已经过时并且recommends you not use them。 (由于历史原因,它们基本上得到支持。)
猜你喜欢
  • 2021-01-07
  • 2021-09-01
  • 1970-01-01
  • 2013-12-22
  • 2021-07-25
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
相关资源
最近更新 更多