Pesquisa de site

Como chamar um programa externo usando awk


Introdução

Awk é uma ferramenta poderosa de processamento de texto que pode ser usada para automatizar várias tarefas, como manipulação de dados, filtragem e relatórios. Um dos recursos interessantes do awk é a capacidade de chamar programas externos a partir do script. Neste artigo, exploraremos como chamar um programa externo usando awk.

Compreendendo a função System()

A função system() é usada para executar comandos externos de dentro do awk. a sintaxe da função system() é a seguinte -

system(command)

O argumento do comando é um comando externo que queremos executar. Quando a função system() é executada, awk passa o argumento do comando para o shell para execução. shell então executa o comando e retorna o status de saída para awk.

Chamando um programa externo

Para chamar um programa externo usando awk, precisamos especificar o comando que queremos executar como argumento para a função system(). Por exemplo, digamos que queremos executar o comando date de dentro de um script awk. Podemos fazer isso da seguinte maneira -

{ 
   system("date") 
}

Neste exemplo, estamos chamando o comando date usando a função system(). Quando o script é executado, o comando date é executado e a data e hora atuais são exibidas na tela.

Passando entrada para um programa externo

Podemos passar a entrada para um programa externo usando a função system(). Por exemplo, digamos que queremos classificar uma lista de números usando o comando sort. Podemos fazer isso da seguinte maneira -

{ 
   print "3
1
2" | "sort" 
}

Neste exemplo, estamos usando a instrução print para gerar uma lista de números (3, 1, 2). Em seguida, estamos usando o símbolo de barra vertical (|) para passar esta lista de números como entrada para o comando de classificação. O comando sort classifica os números e retorna o resultado para o awk.

Armazenando a saída de um programa externo

Podemos armazenar a saída de um programa externo em uma variável usando a função getline(). A função getline() é usada para ler uma linha de entrada de um arquivo ou comando. Podemos usar a função getline() para capturar a saída de um programa externo. Por exemplo, digamos que queremos capturar a saída do comando ls em uma variável. Podemos fazer isso da seguinte maneira -

{ 
   "ls" | getline output 
   print output 
}

Neste exemplo, estamos usando a função system() para executar o comando ls. Estamos então usando a função getline() para capturar a saída do comando ls na variável de saída. Finalmente, estamos usando a instrução print para exibir a saída do comando ls.

Passando argumentos para um programa externo

Podemos passar argumentos para um programa externo usando a função system(). Por exemplo, digamos que queremos converter uma string em maiúsculas usando o comando tr. Podemos fazer isso da seguinte maneira -

{ 
   str = "hello world" 
   cmd = "echo " str " | tr '[:lower:]' '[:upper:]'" 
   cmd | getline output 
   print output 
}

Neste exemplo, estamos usando o comando echo para passar a string “hello world” como entrada para o comando tr. Estamos então usando o comando tr para converter string em maiúsculas. Finalmente, estamos usando a função getline() para capturar a saída do comando tr na variável de saída.

Tratamento de erros

Ao chamar um programa externo usando awk, é importante lidar com erros que podem ocorrer durante a execução. Podemos verificar o status de saída de um programa externo usando a função system(). status de saída é um número que indica sucesso ou falha do comando. Um valor zero indica sucesso, enquanto um valor diferente de zero indica falha.

Por exemplo, digamos que queremos verificar se existe um arquivo usando o comando test. Podemos fazer isso da seguinte maneira -

{ 
   file = "myfile.txt" 
   cmd = "test -e " file 
   if (system(cmd) != 0) { 
      print "File does not exist" 
   } else { 
      print "File exists" 
   } 
}

Neste exemplo, estamos usando o comando test para verificar se o arquivo “myfile.txt” existe. Estamos então usando a função system() para executar o comando de teste. Se o status de saída do comando de teste for diferente de zero, imprimimos "Arquivo não existe". Caso contrário, imprimimos "Arquivo existe".

Exemplos avançados

  • Filtrando a saída de um programa externo Podemos filtrar a saída de um programa externo usando awk. Por exemplo, digamos que queremos exibir apenas a primeira linha de saída do comando ps. Podemos fazer isso da seguinte maneira -

{ 
   cmd = "ps" 
   cmd | getline output 
   close(cmd) 
   split(output, lines, "
") 
   print lines[1] 
}

Neste exemplo, estamos usando a função getline() para capturar a saída do comando ps na variável de saída. Estamos então usando a função split() para dividir a saída em um array de linhas. Finalmente, estamos usando a instrução print para exibir a primeira linha da saída.

  • Usando variáveis awk em comandos externos Podemos usar variáveis awk em comandos externos. Por exemplo, digamos que queremos criar um arquivo com um nome baseado em uma variável usando o comando touch. Podemos fazer isso da seguinte maneira -

{ 
   filename = "myfile.txt" 
   cmd = "touch " filename 
   system(cmd) 
}

Neste exemplo, estamos usando a variável filename no comando touch para criar um arquivo com o nome "myfile.txt".

  • Usando o awk para formatar a saída de um programa externo Podemos usar o awk para formatar a saída de um programa externo. Por exemplo, digamos que queremos exibir a saída do comando df em um formato mais legível. Podemos fazer isso da seguinte maneira -

{ 
   cmd = "df -h" 
   cmd | getline output 
   close(cmd) 
   printf "%-20s%-10s%-10s%-10s%-10s%s
", "Filesystem", "Size", "Used", "Avail", "Use%", 
   "Mounted on" 
   split(output, lines, "
") 
   for (i=2; i<=length(lines); i++) { 
      printf "%-20s%-10s%-10s%-10s%-10s%s
", $1, $2, $3, $4, $5, $6 
   } 
}

Neste exemplo, estamos usando a instrução printf para formatar a saída do comando df. Estamos imprimindo uma linha de cabeçalho com títulos de colunas, seguida pela saída do comando df com cada coluna alinhada a uma largura fixa.

Conclusão

Neste artigo, exploramos como chamar um programa externo usando awk. Vimos como passar a entrada para um programa externo, capturar a saída de um programa externo e lidar com erros que podem ocorrer durante a execução. Usando a capacidade do awk de chamar programas externos, podemos automatizar várias tarefas e tornar nossos scripts mais poderosos e flexíveis.