fbpx

Comandos Linux – Comando a2p

Comando Linux a2p

Atualizado: 05/04/2019 por Computer Hope

a2p

O utilitário a2p pega um script awk especificado na linha de comando e produz um script perl comparável na saída padrão.

Sintaxe

  a2p [ opções ] [ nome do arquivo ]

Opções

-D <número>Define sinalizadores de depuração .
-F <caractere>Informa à a2p que esse script awk é sempre chamado com essa opção -F .
-n <lista de campos>Especifica os nomes dos campos de entrada se a entrada não precisar ser dividida em uma matriz . Se você estava traduzindo um script awk que processa o arquivo de senha , pode dizer:

  a2p -7 -nlogin.password.uid.gid.gcos.shell.home

Qualquer delimitador pode ser usado para separar os nomes dos campos.

 <número>Faz com que o a2p assuma que a entrada sempre terá tantos campos.
-oDiz ao a2p para usar o antigo comportamento do awk . As diferenças são:

  1. que o velho awk sempre tem um loop de linha, mesmo que não haja ações de linha, enquanto o novo awk não; e
  2. no velho awk , o sprintf é extremamente ganancioso com seus argumentos .

Por exemplo, dada a declaração:

  imprimir sprintf (some_args), extra_args;

O velho awk considera extra_args como argumentos para o sprintf ; O novo awk os considera argumentos para imprimir .

Considerações

O a2p não pode fazer um trabalho de tradução tão bom quanto um humano faria, mas geralmente funciona muito bem. Existem algumas áreas em que você pode examinar o script perl produzido e ajustá-lo um pouco. Aqui estão alguns deles, em nenhuma ordem específica.

  • Existe uma expressão estranha de colocar int () em torno de uma expressão de string para forçar a interpretação numérica, mesmo que o argumento seja sempre inteiro de qualquer maneira. Isso geralmente não é necessário no perl , mas o a2p não pode dizer se o argumento sempre será inteiro, então o deixa em branco. Você pode removê-lo.
  • Perl diferencia a comparação numérica da comparação de strings . O Awk tem um operador para ambos, que decide em tempo de execução que comparação fazer. A2p não tenta fazer um trabalho completo de emulação do awk neste momento. Em vez disso, adivinha qual você deseja. Quase sempre está certo, mas pode ser falsificado. Todas essas suposições são marcadas com o comentário “” # ??? “” . Você deve passar e verificá-los. Você pode querer executar pelo menos uma vez com a opção -w para perl , que avisará se você usar == onde você deveria ter usado o eq .
  • O Perl não tenta emular o comportamento do awk no qual elementos inexistentes da matriz passam a existir ao serem referenciados. Se, de alguma forma, você estiver contando com esse mecanismo para criar entradas nulas para um subseqüente para … in , elas não estarão lá em perl .
  • Se o a2p cria uma linha dividida que atribui a uma lista de variáveis com aparência ( Fld1 , Fld2 , Fld3 … ), convém executar novamente o a2p usando a opção -n mencionada acima. Isso permitirá que você nomeie os campos em todo o script. Se ele se dividir em uma matriz, provavelmente o script está se referindo ao número de campos em algum lugar.
  • A instrução exit no awk não necessariamente sai; vai para o bloco END, se houver um. Os scripts awk que fazem contorções no bloco END para contorná-lo nessas circunstâncias podem ser simplificados removendo a condicional no bloco END e saindo diretamente do script perl .
  • O Perl tem dois tipos de array, indexados numericamente e associativos. Matrizes associativas Perl são chamadas de “hashes”. As matrizes awk geralmente são convertidas em hashes, mas se você souber que o índice sempre será numérico, poderá alterar o {  } para [  ]. A iteração sobre um hash é feita usando a função keys (), mas a iteração sobre uma matriz NÃO é. Pode ser necessário modificar qualquer loop que itere sobre essa matriz.
  • O Awk começa assumindo que o OFMT tenha o valor % .6g . O Perl começa assumindo que seu equivalente, $ # , tenha o valor % .20g . Você desejará definir $ # explicitamente se usar o valor padrão do OFMT.
  • Perto do início do loop da linha, estará a operação de divisão implícita no script awk . Há momentos em que você pode passar disso por alguns condicionais que testam o registro inteiro, para que a divisão não seja feita com tanta frequência.
  • Por razões estéticas, convém alterar as variáveis ​​de índice de baseadas em 1 (estilo awk ) para baseadas em 0 (estilo Perl ). Certifique-se de alterar todas as operações nas quais a variável está envolvida.
  • Comentários imaturos como “# perl é melhor que awk” não são modificados e passam como estão.
  • Os scripts do awk geralmente são incorporados a um shell script que canaliza coisas para dentro e para fora do awk . Freqüentemente, o wrapper do shell script pode ser incorporado ao script perl , já que o perl pode iniciar pipes dentro e fora de si e pode fazer outras coisas que o awk não pode fazer por si só.
  • Os scripts que se referem às variáveis ​​especiais RSTART e RLENGTH geralmente podem ser simplificados consultando as variáveis $ ` , $ & e $ ‘ , desde que estejam dentro do escopo da correspondência de padrões que os define.
  • O script perl produzido pode ter sub-rotinas definidas para lidar com a semântica do awk em relação a getline e print. Como o a2p geralmente escolhe a correção sobre a eficiência. Quase sempre é possível reescrever esse código para ser mais eficiente descartando o açúcar semântico.
  • Por questões de eficiência, convém remover a palavra-chave de qualquer declaração de retorno que seja a última declaração executada em uma sub-rotina. o a2p captura o caso mais comum, mas não analisa blocos incorporados para casos mais sutis.
  • ARGV [0] se traduz em $ ARGV0 , mas ARGV [n] se traduz em $ ARGV [$ n-1] . Um loop que tenta iterar sobre ARGV [0] não o encontrará.

Exemplos

  a2p myfile.awk

Este comando irá ler o arquivo myfile.awk e produzirá a versão perl do mesmo script para a saída padrão. Para gravar a saída em um arquivo, use o seguinte comando:

  a2p myfile.awk> myfile.pl

awk – Intérprete para a linguagem de programação de processamento de texto AWK.
s2p – converte um script sed em um script Perl.
sed – Um utilitário para filtrar e transformar texto.

13 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.