bash,比较一个命令的输出

时间:2013-03-12 13:50:43

标签: bash comparison arguments

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

  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

3 个答案:

答案 0 :(得分:7)

至少在我的情况下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的输出添加到您的问题或作为评论。

答案 1 :(得分:2)

试试这个:

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

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

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

注意

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

答案 2 :(得分:0)

你需要的可能是

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

而不是

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