[tutorial] perl via linha de comando

Postagem de conteúdo sobre programação perl
Post Reply
User avatar
Kodo no Kami
Admin
Admin
Posts: 740
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

[tutorial] perl via linha de comando

Post by Kodo no Kami » Thu Jan 24, 2019 1:00 pm

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)

Code: Select all

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

é possivel colocar mais de um parâmetro -e

Code: Select all

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

Code: Select all

cat texto.csv | perl -n -e ' print '
o codigo abaixo é equivalente ao anterior

Code: Select all

cat texto.csv | perl -ne ' print '
Image

em awk o código anterior seria equivalente a esse

Code: Select all

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

Code: Select all

cat texto.csv | perl -p -e ' '
para a gente pegar a passagem naquela linha podemos usar a variável $_

Code: Select all

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)

Code: Select all

cat texto.csv | perl -n -e ' if($_ =~ /^.o/){ print } '
outra forma de fazer o comando anterior seria

Code: Select all

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

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

Code: Select all

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

Code: Select all

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

é 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)

Code: Select all

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

Code: Select all

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

Code: Select all

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

tambem é possivel criar um script e chamar ele

Code: Select all

#!/usr/bin/perl

print @F[0];
no comando do script não colocamos o -e apenas o nome do script

Code: Select all

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

Code: Select all

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

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

by kodo no kami
Image

que desagradavel ~ mirai kuriyama

v1n1
Membro
Membro
Posts: 4
Joined: Fri Jan 25, 2019 3:49 pm

Re: [tutorial] perl via linha de comando

Post by v1n1 » Fri Feb 15, 2019 9:02 am

Muito bom mano ! Só uma duvida, no comando

Code: Select all

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

User avatar
Kodo no Kami
Admin
Admin
Posts: 740
Joined: Fri Jan 02, 2015 1:56 pm
Contact:

Re: [tutorial] perl via linha de comando

Post by Kodo no Kami » Sun Feb 17, 2019 8:36 pm

sim isso mesmo mano @F[N] seria a coluna
Image

que desagradavel ~ mirai kuriyama

Post Reply

Return to “Perl”