Преобразовать ключ: значение парных блоков данных в файл csv

У меня есть несколько блоков данных Key: Value, разделенных разделителем «*************» в текстовом файле. Необходимая здесь помощь – это сценарий оболочки для преобразования их в файл csv.

************* Name : Anderson Age : 32 Country : US ************* Name : Pramod Country : UK ************* Country : Africa Sport : Football ************* 

Выходом должен быть файл csv с нижеследующим форматом OutPut:

 Name,Age,Country,Sport Anderson,32,USA, Pramod,,UK, ,,Aftica,Football 

Это похоже на преобразование rec2csv из GNU recutils, но это я хочу, чтобы это было сделано с помощью Shell Scripting

One Solution collect form web for “Преобразовать ключ: значение парных блоков данных в файл csv”

Вы можете использовать awk для этого преобразования:

 $ awk -F' : ' 'BEGIN { print "Name,Age,Country,Sport"; OFS="," } /^\*+$/ && NR>1 { print a["Name"], a["Age"], a["Country"], a["Sport"]; delete a; next} { a[$1]=$2} ' file.rec 

Где : используется в качестве разделителя поля ввода, устанавливается как разделитель выходного поля, ассоциативный массив a используется для временного хранения значений, регулярное выражение ^\*+$ используется для распознавания разделительных строк записи, полная запись – только после второй разделительной линии (т. е. если количество записей больше 1), и после каждой записи массив очищается.

Переменные $1 и $2 ссылаются на ключ и значение на входе. next утверждение непосредственно продвигает обработку на следующую строку.

Не существующие ключи в ассоциативном массиве приводят к пустым строкам – что соответствует вопросу.

  • установить язык bash и поставить переменные
  • Слияние двух файлов с разницей
  • Хранение части аргументов командной строки в массиве пользователей
  • Как запустить «find -exec <script> {} \;
  • Как синхронизировать два диска (или папки) с использованием символических (или жестких) ссылок (например, rsync)?
  • Loop sed из шаблона с различными выходами из текстового файла, содержащего переменные
  • bc удаляет десятичную точку
  • Копирование последних файлов с удаленных серверов
  • Нельзя отступать heredoc, чтобы соответствовать отступу вложенности
  • Создавать эскиз с видео в произвольный временной интервал
  • Удаление шаблона из файла и добавление его в конец?
  • Interesting Posts

    Добавить временные метки для вывода команды «top»

    Больше места в файловой системе / opt даже после расширения хранилища

    Создайте скрипт из сценария Bash, используя здесь-документ; почему моя переменная заменяется?

    Где найти историю передачи файлов от клиента SSH (Debian / Linux)?

    Где настройка, которая устанавливает экспериментальное репо для более низкого приоритета?

    Как выразить все файлы / каталоги в опции extra -exec команды `find`?

    opensuse sudo bash дает полные имена путей

    Как добавить автозаполнение пути к пользовательской функции завершения в zsh?

    Скудно ли считать мой домашний каталог OpenAFS?

    Конфигурация DNS DNS для суффикса

    Как удалить все файлы в каталоге, кроме одного файла в Solaris

    консоль, отображающая символ цитаты из gcc wongly

    предотвращение очистки экрана при выходе из сеанса ssh

    Как включить дополнительное ведение журнала аудита?

    ОШИБКА: Не удалось создать Linux

    Linux и Unix - лучшая ОС в мире.