У меня есть сценарий жемчуга для преобразования текстового файла в json.
Сценарий похож на это:
perl -MJSON -F, -lane '
print to_json ({
domain => shift @F,
emails => [map {{email =>$_}} @F]
}, {canonical=>1})
' input1.txt' > output.json
Этот сценарий пишет вывод в файл в формате JSON.
Я хочу знать, как я могу изменить сценарий для прерывания входа также.
Вот пример:
Входной файл содержит что-то как следующее:
example.com,1@example.com,2@example.com,3@example.com,4@example.com,....
Вывод файл JSON будет:
{"domain":"example.com",emails:[{email:"1@example.com"},{email:"2@example.com"},.....]}
Точка (.) означает, что существуют другие электронные письма, добавляемые там после.
Теперь то, что я хочу иметь, если электронная почта превышает 21, то сценарий должен записать в новую строку в выходном файле
Входной файл:
example.com,1@example.com,2@example.com,3@example.com,4@example.com,....500@example.com
Вывод должен быть:
{"domain":"example.com",emails:[{email:"1@example.com"},{email:"2@example.com"},.....,{email:21@example.com}]}
{"domain":"example.com",emails:[{email:"22@example.com"},{email:"23@example.com"},.....]}
{"domain":"nextdomain.com",emails:[{email:"1@nextdomain.com"},{email:"2@nextdomain.com"},.....]}
И процесс продолжается.
Используйте соединение встык для удаления первого 21 элемента массива в цикле:
perl -MJSON -F, -lane '
$domain = shift @F;
while (@f = splice @F, 0, 21) {
print to_json ({
domain => $domain,
emails => [ map { { email => $_ } } @f ]
}, { canonical => 1 });
}
'