Я должен записать сценарий удара, который берет yaml файл:
first:John
last:Smith
first:David
last:Bennet
и преобразуйте его в файл CSV:
John,Smith
David,Bennet
Какие-либо идеи?Спасибо!
Вы найдете полную библиотеку для него, и можно легко использовать его, YAML2CSV... видят GitHub, вот предоставленная ссылка. https://github.com/tokland/yaml2csv
Вот awk
команда:
awk -v RS="first:|last:" '{gsub("first:|last:","",$0);print $1","$2}' RS='' infile.txt
Вывод - как Вы ожидаете:
John,Smith
David,Bennet
Для этого преобразования можно использовать команду 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 /
Обратите внимание, что я добавил оператор if
, чтобы предотвратить ошибку преобразования файла (которая не уничтожит никакие данные, но создаст некоторые бесполезные другие данные)
Используя sed и Miller ( https://github.com/johnkerl/miller ) и запустив:
<input.yaml sed -r 's/:/ /g' | mlr --x2c -N cat >output.csv
у вас будет
John,Smith
David,Bennet
Обратите внимание: ваш ввод файл не является допустимым yaml.