Сценарий Bash для чтения документа построчно и создания нескольких документов с предопределенными именами файлов в одном документе

Я думаю, что проблема здесь в том, что ncне является правильным решением. Прослушивание ncникогда не завершается, поэтому оно будет продолжать добавляться к файлу.

Почему бы не использовать scpили rsync? Если у вас запущен sshdна целевой машине, вы можете использовать любой из них. Если нет, сделайте это или запустите rsyncв режиме демона.

Каждый раз, когда вы запускаете scpили rsyncна отправителе, получатель перезаписывает файл.

0
17.09.2019, 04:51
1 ответ
  1. Вы можете разделить файл popis.txtна 5000+ временных файлов с помощью команды split(GNU coreutils ):

    split -d -a4 -l5 popis.txt split
    

    Это создает файлы split0001, split0002,... с пятью строками в файле и немного упрощает дальнейшую обработку.

  2. Создайте свой модифицированный скрипт и сохраните его какscript.sh:

    #!/bin/bash
    
    for file; do
      while read -r line; do
        if [[ "$line" = "<artist>"* ]]; then
          artist=$line
        elif [[ "$line" = "<song>"* ]]; then
          song=$line
        elif [[ "$line" = "<album>"* ]]; then
          album=$line
        elif [[ "$line" = "<year>"* ]]; then
          year=$line
        else
          # remove prefix `#FILENAME "` and the last quote `"`
          filename=$(echo "$line" | sed 's/[^"]*"//;s/"[[:space:]]*$//')
        fi
      done < "$file"
      echo "<?xml version='1.0' encoding='UTF-8'?><Metadata>${artist}${song}${album}${year}</Metadata>" > "$filename"
    done
    
  3. Сделайте ваш скрипт исполняемым и запустите его на всех splitXXXXфайлах:

    chmod +x script.sh
    ./script.sh split*
    
  4. Если все прошло хорошо, для каждого входного файла должен быть создан один XML-файл, и вы можете удалить временные файлы:

    rm split*
    
0
28.01.2020, 03:17

Теги

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