我正在尝试编写一个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