Я пытаюсь записать сценарий оболочки для создания нескольких .xml
файлы на основе данных, считанных с .csv
. Я нуждаюсь в помощи о том, как сделать цикл для каждого .xml
создание файла.
do while
или for
считать каждую строку из .csv
.xml
файл с названием emp-ценуроза в любой отдельной папкеEmployee.csv
23456,USD
89012,EUR
12345,CHF
34567,SGD
.xml
структура<?xml version="1.0" encoding="UTF-8"?>
<fi:Organisation>
<fi:Company>
<fi:DEPARTMENT>Account</fi:DEPARTMENT>
<fi:department-key>ABC123</fi:department-key>
<fi:department-id>121</fi:department-id>
</fi:Company>
<fi:Employee>
<fi:emp-gid>DE0008475021</fi:emp-gid>
<fi:country>EUR</fi:country>
</fi:body>
</fi:organisation>
#!/bin/bash
InputFile="Employee.csv"
OutputFile="Emp_gid.xml"
echo '<?xml version="1.0"?>' > $OutputFile
echo '<fi:organisation>' >> $OutputFile
echo '<fi:Company>' >> $OutputFile
echo '<fi:DEPARTMENT>Account</fi:DEPARTMENT>' >> $OutputFile
echo '<fi:department-key>ABC123</fi:department-key>' >> $OutputFile <-- want to increment by one for all xml file (ABC123,ABC124..) -->
echo '<fi:department-id>121</fi:department-id>' >> $OutputFile <-- want to increment by one for all xml file (121,122,123,..) -->
echo '</fi:Company>' >> $OutputFile
while IFS=$',' read -r -a arry
do
echo ' <fi:Employee>' >> $OutputFile
echo ' <fi:emp-gid>'${arry[0]}'</fi:emp-gid>' >> $OutputFile
echo ' <fi:country>'${arry[1]}'</fi:country>' >> $OutputFile
echo ' </fi:Employee>' >> $OutputFile
done < $InputFile
echo '</fi:organisation>' >> $OutputFile
Это выше сценария только генерирует тот .xml
файл со всеми записями. Но я хотел бы ожидать некоторую функцию или сценарий, который может генерировать отдельный .xml
файлы для каждой строки в .csv
файл и помещенный это в отдельную папку.
Я сделал бы это:
# a printf format string
xml_template=$(cat <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<fi:Organisation>
<fi:Company>
<fi:DEPARTMENT>Account</fi:DEPARTMENT>
<fi:department-key>%s%d</fi:department-key>
<fi:department-id>%d</fi:department-id>
</fi:Company>
<fi:Employee>
<fi:emp-gid>%s</fi:emp-gid>
<fi:country>%s</fi:country>
</fi:body>
</fi:organisation>
XML
)
dept_key_prefix=ABC
dept_key=100 # choose suitable initial values
dept_id=100
while IFS=, read -r emp_gid country; do
printf "$xml_template" \
$dept_key_prefix \
$((dept_key++)) \
$((dept_id++)) \
"$emp_gid" \
"$country" \
> "$emp_gid.xml"
done < Employee.csv