在Bash中解析CSV值

时间:2015-10-07 03:31:31

标签: bash csv

我正在尝试编写一个Bash脚本来读取特定的csv,并根据该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

我看不出这个脚本有什么问题。它只打印&#34;检测到&#34;,从不打印&#34;移动&#34;并且不移动文件,所以我怀疑它没有正确匹配文本。是否有可能我正在读取csv错误的内容,并且可能不是csv中的所有值都是字符串?或者我做错了什么?

感谢您提供任何帮助。

编辑:用。替换违规的if语句      [&#34; $ HASVAL&#34; -eq 1]

给了我

detected 
:  integer expression expected

在每一行上,所以我不确定整数比较是否也有效。

编辑:如下所述,看起来问题已经解决了。 .csv有DOS结尾,因为我查看了最后一列,它不能正确匹配,最后一列必须被修剪为&#39; / r&#39;所以它实际上可以将它与正确的字符串匹配。感谢大家的帮助。

1 个答案:

答案 0 :(得分:-1)

编辑:最佳做法建议对if语句使用double [[]]和double equals。您也验证过您正在比较字符串值,或者您是否应该进行整数比较。