Ir para conteúdo
Entre para seguir isso  
kodo no kami

[tutorial] perl via linha de comando

Recommended Posts

Galera um bom uso para linguagem perl é o processamento de texto (excelente para manipular arquivos csv), ele pode ser usado ate mesmo via saída do terminal de forma bastante semelhante a linguagem awk. Para executar funções perl diretamente pelo terminal usamos o parâmetro -e ou -E seguido das funções e estruturas separadas por ponto e virgula (ela também deve ser colocada entre aspas)

perl -e ' print "perl é vida\n"; '

4OOgKZH.png

é possivel colocar mais de um parâmetro -e

perl -e ' $variavel = "perl e vida"; ' -e ' print $variavel . "\n"; '

podemos redirecionar a saída usando os comandos e programas do terminal para o interpretador perl via pipe, entretanto precisamos definir o parâmetro -n para que seja lido linha a linha e executado o mesmo comando em todas as linhas

cat texto.csv | perl -n -e ' print '

o codigo abaixo é equivalente ao anterior 

cat texto.csv | perl -ne ' print '

tyzMBjb.png

em awk o código anterior seria equivalente a esse

cat texto.csv | awk ' {print} '

é possivel ler linha a linha e fazer o print automaticamente bastando substituir o parâmetro -n pelo parâmetro -p

cat texto.csv | perl -p -e ' '

para a gente pegar a passagem naquela linha podemos usar a variável $_

cat texto.csv | perl -n -e ' print $_ '

outro exemplo só que dessa vez usando regex para filtrar os nomes que na segunda letra deles tem um 'o' (semelhante ao comando grep)

cat texto.csv | perl -n -e ' if($_ =~ /^.o/){ print } '

outra forma de fazer o comando anterior seria

cat texto.csv | perl -n -e ' print if $_ =~ /^.o/ '

qt6N97b.png

é possivel usar split para recortar trechos específicos e manipular eles, exemplo separar tudo em uma array para manipular separadamente (semelhante ao comando cut)

cat texto.csv | perl -n -e ' @linha = split(",",$_); print "$linha[1]\n"'

o perl nos permite separar da mesma forma que o comando anterior de uma forma bastante simples usando o argumento -a para fazer o split e o -F seguido do delimitador (nesse caso é o ","). Para a gente acessar cada valor usamos @F e a sua posição 

cat texto.csv | perl -F"," -a -n -e ' print "@F[1]\n" '

rsn5D8H.png

é possível usar a estrutura BEGIN e END para processar apenas uma vez no começo ou no fim, exemplo um contador de linha que começa ja setado com o valor 1 e vai incrementando a cada nova linha e exibindo o resultado quando terminar (wc pra que ne)

cat texto.csv | perl -ne 'BEGIN{ $cont = 1 }; END{ print "linhas: $cont \n" }; $cont++ '

podemos usufruir de todos os recursos e módulos da linguagem perl, exemplo usando o modulo Digest::MD5 para retornar a hash dos nomes

cat texto.csv | perl -F"," -ane 'BEGIN{ use Digest::MD5 md5_hex }; print md5_hex(@F[0]) . "\n" '

com parâmetro o -M importamos o modulo desejado sem precisar ficar declarando ele com o use

cat texto.csv | perl -F"," -M"Digest::MD5 md5_hex" -ane 'print md5_hex(@F[0]) . "\n" '

nCOG6xq.png

tambem é possivel criar um script e chamar ele

#!/usr/bin/perl
print @F[0];

no comando do script não colocamos o -e apenas o nome do script

cat texto.csv | perl -F"," -an kodo.pl

embora os comandos digitados seja em um terminal linux o mesmo pode ser feito em outras plataformas tambem. Exemplo no prompt do windows

type texto.csv | perl -F"," -ane " print \"@F[0]\n\" "

Gvl5zOB.png

bom galera é isso, existem outros parâmetros que podem ser passados para o interpretador perl além dos citados \o

by kodo no kami

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×

Informação Importante

Ao usar este site, você concorda com nossos Termos de Uso.