perl via linha de comando

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 24 Janeiro 2019.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    228
    Sexo:
    Masculino
    Avaliações:
    +299 / -0
    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)

    Código (Forge Crash):
    perl -e ' print "perl é vida\n"; '
    [​IMG]

    é possivel colocar mais de um parâmetro -e

    Código (Forge Crash):
    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

    Código (Forge Crash):
    cat texto.csv | perl -n -e ' print '
    o codigo abaixo é equivalente ao anterior

    Código (Forge Crash):
    cat texto.csv | perl -ne ' print '
    [​IMG]

    em awk o código anterior seria equivalente a esse

    Código (Forge Crash):
    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

    Código (Forge Crash):
    cat texto.csv | perl -p -e ' '
    para a gente pegar a passagem naquela linha podemos usar a variável $_

    Código (Forge Crash):
    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)

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

    Código (Forge Crash):
    cat texto.csv | perl -n -e ' print if $_ =~ /^.o/ '
    [​IMG]

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

    Código (Forge Crash):
    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

    Código (Forge Crash):
    cat texto.csv | perl -F"," -a -n -e ' print "@F[1]\n" '
    [​IMG]

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

    Código (Forge Crash):
    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

    Código (Forge Crash):
    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

    Código (Forge Crash):
    cat texto.csv | perl -F"," -M"Digest::MD5 md5_hex" -ane 'print md5_hex(@F[0]) . "\n" '
    [​IMG]

    tambem é possivel criar um script e chamar ele

    Código (Forge Crash):
    #!/usr/bin/perl

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

    Código (Forge Crash):
    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

    Código (Forge Crash):
    type texto.csv | perl -F"," -ane " print \"@F[0]\n\" "
    [​IMG]

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

    by kodo no kami
     
    • Top Top x 1
    Última edição: 24 Janeiro 2019

Compartilhe esta Página