我正在嘗試編寫一個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',以便它可以將它匹配到適當的字符串。感謝大家的幫助。
在測試之前,您是否嘗試過回顯'$ HASVAL'的值以確認它是0還是1?你確定62是正確的領域嗎? – chepner
我有,並且其印刷各種0和1。 –
檢查'echo「$ {HASVAL} x」'的輸出。 – chepner