使用 csv 中的数据填充模板 bash

Populating a template with data from csv with spaces in bash

我正在编写脚本以从 csv 读取数据并填充模板。这个 'populated template' 然后保存在不同的文件中。

这正是我的脚本现在生成的内容。

采用此模板(示例)

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 文件中的 'cells' 之一中存在 space 时,脚本会中断。我希望它与 spaces 一起使用。我是 bash 的新手,所以一无所知。

如有任何指导,我将不胜感激;这是我的代码

#!/bin/bash
IMPORT="./data/file.csv"
TEMPLATE="./data/temp.txt"

for i in `cat ${IMPORT}`
do 
  VAR_COL1=`echo $i | awk -F, '{print }'`
  VAR_COL2=`echo $i | awk -F, '{print }'`
  VAR_COL3=`echo $i | awk -F, '{print }'`
  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

问题在 for in $(cat ...) 部分。 Space 在一行中进行两次不同的 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`

因为$()可以嵌套,可读性更好