我正在尝试做这样的事情:
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
我正在尝试做这样的事情:
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
至少在我的情况下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
到您的问题或作为评论。
试试这个 :
if (( $(wc -l < "$f") < 2 ))
或者如果你想保持你的语法:
if [ $(wc -l < "$f") -lt 2 ]
((...))
是一个算术命令,如果表达式非零,则返回退出状态 0,如果表达式为零,则返回 1。如果需要副作用(分配),也用作“让”的同义词。见http://mywiki.wooledge.org/ArithmeticExpression
你需要的可能是
if [ `cat $f | wc -l` -lt 2 ]
代替
if [ $(wc -l $f) -lt 2 ]