Как преобразовать yaml в формат файла CSV?

Я должен записать сценарий удара, который берет yaml файл:

first:John
last:Smith

first:David
last:Bennet

и преобразуйте его в файл CSV:

John,Smith
David,Bennet

Какие-либо идеи?Спасибо!

1
задан 31 July 2017 в 15:01

4 ответа

Вы найдете полную библиотеку для него, и можно легко использовать его, YAML2CSV... видят GitHub, вот предоставленная ссылка. https://github.com/tokland/yaml2csv

0
ответ дан 8 December 2019 в 04:32

Вот awk команда:

awk -v RS="first:|last:" '{gsub("first:|last:","",$0);print $1","$2}' RS='' infile.txt

Вывод - как Вы ожидаете:

John,Smith
David,Bennet
0
ответ дан 8 December 2019 в 04:32

Для этого преобразования можно использовать команду sed :

 <file.yaml sed 's/first://g' | sed ':a;N;$!ba;s/\nlast:/,/g' | sed -r '/^\s*$/d' > file.csv

Пояснение:

  • - это входной файл (здесь ваш файл YAML для преобразования)
  • sed 's / first: // g' сначала удалит каждую : строка list character
  • sed ': a; N; $! ba; s / \ nlast: /, / g' делает почти то же самое, что и предыдущая команда, но все параметры используются для обнаружения символа новой строки, который является предыдущим последний: список строковых символов (и замените его запятой , `); см. этот ответ StackOverflow подробнее
  • sed -r '/ ^ \ s * $ / d' удалит все оставшиеся пустые строки, см. этот ответ StackOverflow для подробнее
  • > file.csv перенаправит результат в новый файл .csv (если этот файл не существует, он будет создан автоматически), поскольку преобразование завершено

Результат:

John,Smith
David,Bennet

Создайте свой собственный сценарий, который сможет конвертировать любой файл .yaml в файл .csv . В моем примере мой скрипт называется YAMLtoCSV.sh :

#! /bin/bash

if [ ${1#*.} = "yaml" ]
then
    <$1 sed 's/first://g' | sed ':a;N;$!ba;s/\nlast:/,/g' | sed -r '/^\s*$/d' > ${1%%.*}.csv
    echo "Conversion from" $1 "to" ${1%%.*}.csv "done"
else
    echo "This file didn't have YAML extension"
fi

и для его выполнения (не забудьте сделать скрипт исполняемым с помощью команды sudo chmod + x YAMLtoCSV.sh ):

./YAMLtoCSV.sh /home/<user>/file.yaml

Вы получите файл с именем file.csv рядом с вашим файлом .yaml , поэтому его путь будет / home / / file.csv

Обратите внимание, что я добавил оператор if , чтобы предотвратить ошибку преобразования файла (которая не уничтожит никакие данные, но создаст некоторые бесполезные другие данные)

0
ответ дан 16 December 2019 в 09:21

Используя sed и Miller ( https://github.com/johnkerl/miller ) и запустив:

<input.yaml sed -r 's/:/ /g' | mlr --x2c -N cat >output.csv

у вас будет

John,Smith
David,Bennet

Обратите внимание: ваш ввод файл не является допустимым yaml.

1
ответ дан 7 January 2020 в 15:48

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

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