您好
我在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
答案 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}}