У меня вопрос. Я хотел бы написать perl-скрипт для анализа вывода Mailgun в формате csv. Я бы предположил, что функции «split» и «join» будут работать правильно для этой процедуры. Вот некоторые примерные данные:mailgun отчет в формат csv perl
Примеры данных
{
"geolocation": {
"city": "Random City",
"region": "State",
"country": "US"
},
"url": "https://www4.website.com/register/1234567",
"timestamp": "1237854980723.0239847"
}
{
"geolocation": {
"city": "Random City2",
"region": "State2",
"country": "mEXICO"
},
"url": "https://www4.website2.com/register/ABCDE567",
"timestamp": "1237854980723.0239847"
}
Желаемая Выход
"город", "регион", "страна", "URL", "метка времени"
"Random City", "State", "US", "https://www4.website.com/register/1234567", "1237854980723.0239847"
"Random City_2", "State_2", "mEXICO", "www4.website2.com/ABCDE567","1237854980723.0239847_2"
Моя цель - взять данные моего образца и создать нужный результат в виде CSV с разделителями-запятыми файл. Я не совсем уверен, как это сделать. Обычно я пытаюсь взломать это с помощью серии однострочных в пакетном файле, но я бы предпочел сценарий perl. Реальные данные будут содержать больше информации. Однако просто выяснить, как разбирать общую структуру, будет хорошо.
Вот что у меня есть в пакетном файле.
Код
perl -p -i.bak -e "s/(,$|,+ +$|^.*?{$|^.*?}.*?$|^.*?],.*?$)//gi" file.txt
rem Removes all unnecessary characters and lines with { and }.^
perl -p -i.bak -e "s/(^ +| +$)//gi" file.txt
perl -p -i.bak -e "s/^\n$//gi" file.txt
rem Removes all blank lines in initial file. Next one-liner takes care of trailing and beginning
rem whitespace. The file is nice and clean now.
perl -p -e "s/(^\".*?\"):.*?$/$1/gi" file.txt > header.txt
rem retains only header info and puts into 'header.txt'^
perl -p -e "s/^\".*?\": +(\".*?\"$)/$1/gi" file.txt > data.txt
rem retains only data that is associated with each field.
perl -p -i.bak -e "s/\n/,/gi" data.txt
rem replaces new line character with ',' delimiter.
perl -p -i.bak -e "s/^/\n/gi" data.txt
rem drops data down a line
perl -p -i.bak -e "s/\n/,/gi" header.txt
rem replaces new line character with ',' delimiter.
copy header.txt+data.txt report.txt
rem copies both files together. Since there is the same amount of fields as there are data
rem delimiters, the columns and headers match.
Мой выход
"город", "регион", "страна", "URL", "метка времени"
"Random City", «Государство», «США», «https://www4.website.com/register/1234567», 1237854980723.0239847
Это делает трюк, но conde nsed скрипт будет лучше. Меняющиеся ситуации могут повлиять на этот пакетный скрипт. Мне нужно что-то более твердое. Какие-либо предложения??
использовать [JSON] (https://metacpan.org/pod/JSON). – jm666