Formate o conteúdo do arquivo usando Perl

2

Eu tenho um arquivo com o seguinte formato:

>Country1 
Aus
trali
a

>Country5
Swi
tzer
land

>Country2
Net
herland
s

Eu quero produzir um arquivo com o seguinte formato:

>Country1 Australia
>Country5 Switzerland
>Country2 Netherlands
    
por Francesca 20.07.2014 / 21:30

2 respostas

8

Uma solução Perl direta:

$ perl -lne '
    if(/^>/) {printf "%s ", $_;next}
    if(/^$/) {printf "\n";next}
    printf "%s", $_;
' file
>Country1 Australia
>Country5 Switzerland
>Country2 Netherlands

ou um caminho mais curto:

$ perl -ane 'BEGIN{$/="";};print "$F[0] ",@F[1..$#F],"\n"' file
>Country1 Australia
>Country5 Switzerland
>Country2 Netherlands

Defina $/ como cadeia vazia, o que faz com que o Perl mude para o modo de parágrafo, o que significa que o separador de registro é uma ou mais linhas em branco.

    
por 20.07.2014 / 21:38
0

Use a -p switch para processar o arquivo linha por linha e exibir cada linha processada . Substitua a nova linha por um espaço se a linha começar com > e por nada se iniciar por outro caractere não pertencente à nova linha (ou seja, se não estiver vazio).

perl -pe 'if (/^>/) {s/\n/ /} elsif (/^./) {s/\n//}'
    
por 21.07.2014 / 02:13