Script Perl para cortar entrada e iniciar uma nova linha após um determinado número de instâncias

1

Eu tenho um script perl para converter um arquivo de texto em json.
O script é assim:

perl -MJSON -F, -lane '
    print to_json ({
           domain => shift @F,
           emails => [map {{email =>$_}} @F]
           }, {canonical=>1})
' input1.txt' > output.json

Esse script grava a saída em um arquivo no formato JSON.
Eu quero saber como eu posso modificar o script para cortar a entrada também. Aqui está um exemplo:
O arquivo de entrada contém algo como o seguinte:

example.com,[email protected],[email protected],[email protected],[email protected],....

O arquivo JSON de saída será:

{"domain":"example.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....]}

O ponto (.) significa que há outros e-mails sendo adicionados lá depois.

Agora, o que eu quero é que, se o e-mail exceder 21, o script deverá gravar em uma nova linha no arquivo de saída

Arquivo de entrada:

example.com,[email protected],[email protected],[email protected],[email protected],[email protected]

O resultado deve ser:

{"domain":"example.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....,{email:[email protected]}]}
{"domain":"example.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....]}
{"domain":"nextdomain.com",emails:[{email:"[email protected]"},{email:"[email protected]"},.....]}

E o processo continua.

    
por Jaffer Wilson 28.01.2017 / 10:28

1 resposta

4

Use emenda para remover os primeiros 21 elementos da matriz em um loop:

perl -MJSON -F, -lane '
    $domain = shift @F;
    while (@f = splice @F, 0, 21) {
        print to_json ({
           domain => $domain,
           emails => [ map { { email => $_ } } @f ]
        }, { canonical => 1 });
    }
'
    
por choroba 28.01.2017 / 11:41