我正在编写一个脚本来从csv读取数据并填充模板。这个已填充的模板'然后保存在不同的文件中。
这正是我的脚本现在生成的内容。
需要此模板(示例)
Data:
Column 1: VAR_COL1
Column 2: VAR_COL2
Column 3: VAR_COL3
并使用此csv
中的数据填充它817273284,ABC1,data1
2394294234,ABC2,data2
输出就是这个,它应该是这样的。
Data:
Column 1: 817273284
Column 2: ABC1
Column 3: data1
Data:
Column 1: 2394294234
Column 2: ABC2
Column 3: data2
我面临的问题是,当其中一个'单元格中有空格时脚本会中断。在csv文件中。我希望它能与空间一起工作。我是bash的新手,所以非常无能为力。
我很感激任何指导;这是我的代码
#!/bin/bash
IMPORT="./data/file.csv"
TEMPLATE="./data/temp.txt"
for i in `cat ${IMPORT}`
do
VAR_COL1=`echo $i | awk -F, '{print $1}'`
VAR_COL2=`echo $i | awk -F, '{print $2}'`
VAR_COL3=`echo $i | awk -F, '{print $3}'`
cat $TEMPLATE | sed -e s/VAR_COL1/$VAR_COL1/g \
-e s/VAR_COL2/$VAR_COL2/g \
-e s/VAR_COL3/$VAR_COL3/g \
>> ./output/output-temp.txt
done
答案 0 :(得分:0)
问题在for in $(cat ...)
部分。一行中的空格进行两次for
周期的不同迭代。
示例:
对于包含此内容的testfile.txt
:
11 22
33
执行以下脚本
for i in $(cat !$)
do
echo $i
done
提供输出:
11
22
33
而非期望:
11 22
33
要正确迭代文件中的行,请参阅https://superuser.com/questions/284187/bash-iterating-over-lines-in-a-variable
的答案P.S。使用
$(command)
结束
`command`
因为$()
可以嵌套而且更具可读性。