【问题标题】:bash, compare the output of a commandbash,比较命令的输出
【发布时间】:2013-03-12 13:50:42
【问题描述】:

我正在尝试做这样的事情:

  if [ $(wc -l $f) -lt 2 ]

其中 $f 是一个文件。当我运行它时,我收到错误消息:

  [: too many arguments

有人知道如何在我的命令中修复这一行吗?

完整的脚本是:

for f in *.csv
do
  if [ $(wc -l $f) -lt 2 ]
      then
      echo $f
      fi
done

【问题讨论】:

    标签: bash comparison arguments


    【解决方案1】:

    至少在我的情况下 wc -l filename 确实输出 32 filename 是 32 行数。所以你必须在行数之后去掉文件名。 您可以从

    更改您的代码
    if [ $(wc -l $f) -lt 2 ]
    

    if [ $(wc -l $f | cut -f1 -d' ') -lt 2 ]
    

    if [ $(wc -l < $f) -lt 2 ]
    

    如果不能解决您的问题,请将wc -l filename 的输出添加到您的问题中或作为评论。

    【讨论】:

      【解决方案2】:

      试试这个:

        if (( $(wc -l < "$f") < 2 ))
      

      或者如果你想保留你的语法:

        if [ $(wc -l < "$f") -lt 2 ]
      

      注意

      ((...)) 是一个算术命令,如果表达式非零则返回退出状态 0,如果表达式为零则返回 1。如果需要副作用(分配),也用作“让”的同义词。见http://mywiki.wooledge.org/ArithmeticExpression

      【讨论】:

        【解决方案3】:

        你需要的大概是

        if [ `cat $f | wc -l` -lt 2 ]
        

        而不是

        if [ $(wc -l $f) -lt 2 ]
        

        【讨论】:

        • 不,这不起作用,当我运行此命令时,它有相同的错误消息。
        • @user788171 编辑了答案。立即查看
        猜你喜欢
        • 2017-04-09
        • 2011-12-12
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        相关资源
        最近更新 更多