как считать все строки один за другим из CSV и создать несколько XML-файлов соответственно (один файл для одной строки) использующий сценарии оболочки

Я пытаюсь записать сценарий оболочки для создания нескольких .xml файлы на основе данных, считанных с .csv. Я нуждаюсь в помощи о том, как сделать цикл для каждого .xml создание файла.

Грубый алгоритм для этого сценария

  • установите в и файлы в сценарии
  • создайте любую функцию или do while или for считать каждую строку из .csv
  • создайте a .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 файл и помещенный это в отдельную папку.

1
задан 24 December 2018 в 10:55

1 ответ

Я сделал бы это:

# 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
1
ответ дан 7 December 2019 в 15:09

Другие вопросы по тегам:

Похожие вопросы: