使用 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`
因为$()
可以嵌套,可读性更好
我正在编写脚本以从 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`
因为$()
可以嵌套,可读性更好