我正在尝试做这样的事情:
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
答案 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 ]