5

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

  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
4

3 回答 3

8

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

于 2013-03-12T13:56:48.663 回答
2

试试这个 :

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

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

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

笔记

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

于 2013-03-12T13:56:29.400 回答
0

你需要的可能是

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

代替

if [ $(wc -l $f) -lt 2 ]
于 2013-03-12T13:52:36.963 回答