如果所有第6个字段均为0,则移动文件

时间:2015-10-13 13:56:46

标签: linux bash shell scripting

我希望能够检查文件以查看文件中的所有记录是否为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

4 个答案:

答案 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