簡體   English   中英

在循環和shell腳本中讀取文件

[英]reading in a file in a loop and shell scripting

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目錄。 我不知道在哪里包括這種循環機制。

你寫的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM