Bash,比较命令的输出结果。

6
我正在尝试做类似于这样的事情:
  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个回答

9

至少在我的情况下,wc -l 文件名 输出 32 文件名,其中32是行数。因此,您必须在行数后去掉文件名。您可以将代码更改为

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

to

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

或者

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

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


3
尝试这个:

试一试:

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

或者,如果您想保留您的语法:
  if [ $(wc -l < "$f") -lt 2 ]

注意

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


0
你需要的可能是:

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

替代

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

不,这不起作用,当我运行此命令时它显示相同的错误消息。 - user788171
@user788171编辑了答案。现在请检查。 - uba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接