使用bs中带空格的csv数据填充模板

时间:2015-10-28 08:38:16

标签: bash csv templates scripting sh

我正在编写一个脚本来从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

1 个答案:

答案 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`

因为$()可以嵌套而且更具可读性。