2015-10-07 81 views
0

我正在嘗試編寫一個Bash腳本,它將讀取特定的csv,並根據該csv中列的值移動文件。但是,當我這樣做時,它將所有內容視爲虛假,並且不會移動這些文件,儘管我確實知道它應該大致讀取五分之一的內容。解析Bash中的CSV值

的代碼如下

#!/bin/bash 

FILE=filename.csv 

while IFS=, read -a csv_line; 
    do 
    EMAIL="${csv_line[1]}" #identify the filename 
    HASVAL="${csv_line[62]}" #should be either 1 or 0 
    if [ -e "$EMAIL" ] 
    then 
     echo "detected" 
     if [ "$HASVAL" = "1" ] 
     then 
      mv "$EMAIL" /home/targetdirectory 
      echo "moved" 
     fi 
    fi 
done < $FILE 

我看不出有什麼不對這個腳本。它只打印「檢測到」,從不打印「移動」並且不移動文件,所以我懷疑它不正確地匹配文本。是否有可能我正在讀取csv錯誤的內容,並且它可能不是csv中的所有值都是字符串?還是我在做其他事情?

謝謝你給予的任何幫助。

編輯:更換有問題的,如果用 [ 「$ HASVAL」 -eq 1]

聲明給我

detected 
: integer expression expected 

在每一行,所以我不知道整數比較會擦出火花。

編輯:如下所述,它看起來像問題已解決。 .csv有DOS結尾,因爲我在查看最後一列,所以它不能正確匹配,而最後一列必須修剪'/ r',以便它可以將它匹配到適當的字符串。感謝大家的幫助。

+0

在測試之前,您是否嘗試過回顯'$ HASVAL'的值以確認它是0還是1?你確定62是正確的領域嗎? – chepner

+0

我有,並且其印刷各種0和1。 –

+0

檢查'echo「$ {HASVAL} x」'的輸出。 – chepner

回答

-1

編輯:最佳做法建議使用double [[]]和double等於您的if語句。還有,你是否驗證過你是比較字符串值還是應該進行整數比較。

+0

編號'='是'test'命令的字符串相等運算符。 – chepner

+0

剛試過這個,它沒有改變任何東西。我相信上面的海報是正確的,因爲=是正確的測試操作符。 –

+0

我試圖用 [「$ HASVAL」-eq 1]替換if語句,但它給了我「response:」整數表達式預期「 –