在循环和shell脚本中读取文件

时间:2015-02-17 17:10:15

标签: shell

if [ ${FILESTATUS} = "GOOD" ] ; then
    mv ${file} /export/home/goodFile
else
    mv ${file} /export/home/badFile
fi

希望将上述内容集成到以下脚本中。如果两列都通过了验证,则应将THAT FILE(.csv)移动到正确的文件目录,否则应将其移动到坏文件中。请帮助集成逻辑/循环

for file in /export/home/*.csv ; do
awk -F', ' '
    # skip the header and blank lines
    NR == 1 || NF == 0 {next}

    # save the data
    { for (i=1; i<=NF; i++) data[++nr,i] = $i }

    END {
        status = "OK"

        # verify column 1
        for (lineno=1; lineno <= nr; lineno++) {
            if (length(data[lineno,1]) == 0) {
                status = "BAD" 
                break
            }
        }
        printf "file: %s, verify column 1, status: %s\n", FILENAME, status

        #verify coulmn 2
        for(linenum = 1; linenum <nr; linenum++) {
        if (length(dataArr[linenum,2]) == 0){
        STATUS = "BAD"
        break
        }

        if ((dataArr[linenum,2]) !~ /^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9][0-9]$/){
        STATUS = "BAD"
        break
        }
    }

        # verify other columns ...
    }
' "$file"
done

这个脚本应该从目录中读取大约10个左右的.csv文件。但是,我希望此脚本集成以下内容如果文件成功通过验证步骤,则转到goodFile目录,否则将转到badfile目录。我不知道在哪里包含这种循环机制。

1 个答案:

答案 0 :(得分:0)

您编写的awk代码STATUS = "BAD"中的任何位置,请将其替换为exit 1

然后,在for循环中,测试awk的退出状态

for file in /export/home/*.csv ; do
    awk -F', ' '....' "$file"

    if [[ $? -eq 0 ]]; then
        # "good" status
        mv ${file} /export/home/goodFile
    else
        # "bad" status
        mv ${file} /export/home/badFile
    fi
done