【发布时间】:2020-11-11 10:03:31
【问题描述】:
下面是我的输入文件和我正在使用的代码 文件:
cat $TESTFILE
2020-01-13,COST_CH_RPT
2018-04-19,LOSS_CH_RPT
代码:
for i in `cat $TESTFILE`
do
export date=`cat $TESTFILE|cut -d',' -f1`
echo date=$date
export Name=`cat $TESTFILE|cut -d',' -f2`
echo Name=$Name
beeline --outputformat=csv2 --hivevar Name=$Name --hivevar date=$date -u ${beeURL} -f TEST.hql
done
目标是为文件中的每一行运行 hql 文件,上面的代码为可用的两行运行了两次,但是为两次运行传递的变量是相同的,即第一行在文件中。 如何区分每次运行的输入变量。
【问题讨论】:
-
我相信很快就会有人发现一个重复的问题,但与此同时:mywiki.wooledge.org/BashFAQ/001 和 shellcheck.net
-
尤其是"Field splitting, ..." section of BashFAQ #1。您可以让
read进行字段拆分并避免使用cut的东西。 -
顺便说一句,您现在所做的直接问题是每次使用
cat $TESTFILE时,它都会读取整个文件,而不仅仅是当前行。echo "$i" | cut ...将是直接修复,但真正使用read循环可以简化一切。 -
如果可以进行简单的分配,请不要使用
export。