我有一个带有以下输入的csv
Product1,Comp1|Comp2|Comp3|...,Owner1|Owner2|||...
Product2,Comp1|Comp2|Comp3|...,Owner1|||Owner3|...
Product3,CompX
我把....表示由|分隔的Comp列表的变量no,我们可以假设每个Comp csv文件都有一个所有者信息,如果可用,否则它将是空白的,
现在我需要以下列格式生成一个xml
<product='Product1' Comp='Comp1' Owner='Owner1' />
<product='Product1' Comp='Comp2' Owner='Owner2' />
<product='Product1' Comp='Comp3' Owner='' />
.
.
.
<product='Product2' Comp='Comp1' Owner='Owner1' />
<product='Product2' Comp='Comp2' Owner='' />
<product='Product2' Comp='Comp3' Owner='Owner3' />
.
.
.
<product='Product3' Comp='CompX' Owner='' />
我为它编写了以下代码。
ifs=$IFS
IFS='
'
for line in `cat input.csv`;do
# echo $line
prd=`echo $line | cut -d',' -f1`
components=`echo $line | cut -d',' -f2`
owners=`echo $line | cut -d',' -f3`
# echo $components
IFS='|'
i=0
for comp in `echo $components`;do
i=`expr $i + 1`
IFS=$ifs
owner=`echo $owners | cut -d'|' -f$i`
echo "<product='$prd' Comp='$comp' Owner='$owner' />"
done
done
哪个不能正常工作。任何人都可以建议我采取其他方式。
答案 0 :(得分:0)
不确定...
符号。我使用单个for循环来处理所有内部列逻辑,并使用简单的while read
方法来逐行处理。
while read LINE
do
COLUMNS=(`echo $LINE | tr ',' ' '`)
COMPS=(`echo ${COLUMNS[1]} | tr '|' ' '`)
for (( i=0 ; i<${#COMPS[@]} ; i++ ))
do
OWNER=`echo ${COLUMNS[2]} | awk '{split($0,owner,"|"); print owner[$1]}'
echo "<product='${COLUMNS[0]}' Comp='${COMPS[$i]}' Owner='$OWNER' />"
done
done < input.csv