我希望能够检查文件以查看文件中的所有记录是否为0,以及是否要移动文件。
我已编写脚本,运行它,没有错误,但它没有移动文件,任何人都可以建议为什么?
#!/bin/bash
result=`cat conc_upld_atp.11002.20141204151900.dat | awk -F , '{ print $6 }' | uniq`
if [ result = "1" ]; then
mv conc_upld_atp.11002.20141204151900.dat home/stephenb/scripttest
fi
答案 0 :(得分:3)
在Bash中=
比较字符串;比较你需要的整数-eq
:
if [ "$result" -eq 1 ]; then
请注意,最好说var=$(command)
。此外,您的命令cat file | awk '...'
可以简化为awk '...' file
。根据你想要做什么,可能awk
可以处理所有这些。
例如,如果您只是想检查第6个字段中是否有0
,请使用:
awk '$1 != 0 {v=1} END {print v+0}' file
然后是你的其余代码。
但是,您可以使用999999999999999999999999999999 suggested in comments:
以极快的速度完成此操作awk -F, '$6!=0{exit 1}' file && mv file newfile
如果任何行包含与0
不同的第6个字段,则循环遍历文件并退出代码错误。如果没有发生这种情况,awk
的退出代码为0,这样就会执行&&
命令,因此发生mv file newfile
。您甚至可以通过以下方式跟踪其他情况:
awk -F, '$6!=0{exit 1}' file && mv file newfile || echo "bad data"
答案 1 :(得分:0)
您想要检查所有记录是否为0
,但是您专门检查了result = "1"
。
我建议两件事:使用数字比较并与正确的值进行比较:
if (( result == 0 )); then
答案 2 :(得分:-1)
如果要检查所有字段是否为0,请尝试以下脚本:
result=`cat conc_upld_atp.11002.20141204151900.dat | awk '{ print $6 }' | uniq`
if [ "$result" == "0" ]; then
mv conc_upld_atp.11002.20141204151900.dat /home/stephenb/scripttest
fi
答案 3 :(得分:-2)
最后我使用了以下内容。
#!/bin/bash
result=`cat conc_upld_atp.11002.20141204151900.dat | awk -F , '{ print $6 }' | uniq`
resultcount=`echo $result | wc -l`
echo $resultcount
if [ $resultcount == "1" ]; then
echo match
mv conc_upld_atp.11002.20141204151900.dat /home/stephenb/scripttest
fi