O script perl
a seguir exibe seu arquivo de entrada ( markizy.txt
) no formato delimitado por tabulação porque há espaços dentro dos campos.
#!/usr/bin/perl
while(<>) {
chomp;
s/ +(vsan|fcalias|pwwn) */\t$1 /g ;
s/ +\t/\t/;
if ($. > 1 && m/^zone name/) {
print $l,"\n";
$l = $_;
} elsif (eof) {
$l .= $_;
print $l,"\n";
} else {
$l .= $_;
};
};
A variável interna perl
$.
é o número da linha atual, portanto, o script evita a impressão (uma linha vazia) quando zone name
está na primeira linha da entrada. Veja man perlvar
para detalhes sobre esta e muitas outras variáveis (e seus apelidos longos como $INPUT_LINE_NUMBER
para $.
).
Salve-o em um arquivo, torne-o executável com chmod +x
e execute-o. por exemplo. com cat -T
para mostrar as abas ( ^I
):
$ ./markizy.pl markizy.txt | cat -T
zone name Zone1_HOSTNAME01^Ivsan XXX^Ifcalias name STORAGEPORT_0^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_1^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_2^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx
zone name Zone2_HOSTNAME02^Ivsan XXX^Ifcalias name STORAGEPORT_3^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name STORAGEPORT_4^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx^Ifcalias name HOSTNAME02^Ivsan XXX^Ipwwn xx:xx:xx:xx:xx
O canal para cat -T
está lá apenas para mostrar que a saída possui campos separados por tabulação (porque eles não parecem muito diferentes de espaços, caso contrário). Não use quando for executado de verdade, apenas redirecione para um arquivo. O Excel (ou gnumeric
ou Libre Office Calc
ou quase qualquer outra planilha) não deve ter dificuldade em importar um arquivo de texto separado por TAB - tem sido um recurso padrão por quase tanto tempo quanto me lembro.
Execute para real como:
./markizy.pl markizy.txt > markizy.csv
Você pode ter que dizer ao Excel que os dados são separados por tabulações em vez de separados por vírgula na importação ou podem detectar esse fato em si.
Como alternativa, se você estiver absolutamente certo de que nenhum dos campos de dados conterá vírgulas, substitua todos os \t
s no script por vírgulas e separe-os por vírgula.