bash - shell 在 for 或 while 循环中读取并传递多个变量
问题描述
下面是我的输入文件和我正在使用的代码 FILE :
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 文件,上面的代码对可用的两行运行了两次,但是为两次运行传递的变量是相同的,即文件中的第一行。 . 我如何区分每次运行的输入变量。
解决方案
正如评论所指出的,当前的解决方案错误地多次重新处理 TESTFILE。更简单的替代方法是使用“读取”循环遍历这些行:
while IFS=, read date Name ; do
echo beeline --outputformat=csv2 --hivevar Name="$Name" --hivevar date="$date" -u "${beeURL}" -f TEST.hql
done < $TESTFILE
它只是遍历 TESTFILE 中的行,然后执行 beeline 命令。建议使用引号来防止输入文件中的错误 - 特别是空格,这将“破坏”命令行。
推荐阅读
- python - Python:圆形物体的分割
- javascript - XMLHttpRequest 失败时如何处理?
- angularjs - AngularJS 调用的函数检索数据但没有将其分配给 $scope 变量
- android - 如何从动态添加的布局中获取微调器选择的数据?
- java - Maven - 禁止 [WARNING] JAR 将为空 - 没有内容被标记为包含在 pom.xml 中
- image - 色度信号是否向 YUV 中的亮度添加任何信息?
- r - 如何避免在 r 中的 csv 文件中重复列名?
- spring - Spring boot 2.0.3 缺少 Spring security oauth2 'dependencies.dependency.version'
- excel - 对数组求和
- yocto - 如何将 BeagleBoneBlack 的 pasm PRU 编译器集成到 Yocto 中