在shell脚本中循环

时间:2011-04-21 08:48:05

标签: shell

您好
我在shell中编写了一个脚本,用于读取包含一些数据的文件:

for (( read x x Y ))
do
if ["$Y" == "5,"]; then
    echo "5"
    sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 6,/d' file.txt  
else 
    echo 'fail'
    fi
done

当我使用while循环执行它时,它的工作时间太长,因为文件很大并且逐行执行 所以我想用循环来做,我得到这个错误:syntax error near unexpected token 'done'

你能帮助我吗? 感谢

编辑:我想知道是否可以做这样的事情:
 awk 'BEGIN {FS=", "}
        { if ( $3 == "5" )'
            echo "5"
            sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 6,/d' newfile
        'else { print "fail" } }' file

3 个答案:

答案 0 :(得分:2)

您的代码中存在多个语法错误。

试试这个:

while read x x Y
do
  if [ "$Y" == "5," ]
  then
    echo "5"
    sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 6,/d' file.txt  
  else
    echo 'fail'
  fi
done < YOUR_FILE

YOUR_FILE应至少有三列(x x Y)。

答案 1 :(得分:0)

您需要在if之前使用fi关闭done语句。

你也可以在AWK中完成,没有循环:

awk 'BEGIN {FS="<SET YOUR FIELD SEPARATOR HERE>"}
     { if ( $3 == "5" ) { print "5" ; if ( $0 !~ "^[0-9][0-9]*, [0-9][0-9]*, 6,") print $0 >> "tmpfile" } else { print "fail" ; print $0 >> "tmpfile" } }' YOUR_INPUT_FILE

然后看到tmpfile的内容......

HTH

答案 2 :(得分:0)

如果你在shell脚本中启动if,那么你也应该以{{1​​}}

结束它