AWK - Funções Diversas

AWK tem as seguintes funções diversas -

fechar (expr)

Esta função fecha o arquivo do pipe ..

Exemplo

[jerry]$ awk 'BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   
   close(cmd, "to")
   cmd |& getline out
   print out;
   
   close(cmd);
}'

Ao executar este código, você obtém o seguinte resultado -

Resultado

HELLO, WORLD !!!

O script parece enigmático? Deixe-nos desmistificar.

  • A primeira declaração, cmd = "tr [a-z] [A-Z]" - é o comando para o qual estabelecemos a comunicação bidirecional de AWK.

  • A próxima declaração, ou seja, o printcomando, fornece entrada para o comando tr. Aqui&| indica comunicação bidirecional.

  • A terceira afirmação, ou seja, close(cmd, "to"), fecha o to processo após competir sua execução.

  • A próxima declaração cmd |& getline out armazena a saída em out variável com o auxílio da função getline.

  • A próxima instrução print imprime a saída e, finalmente, a função close fecha o comando.

excluir

Esta função exclui um elemento de uma matriz. O exemplo a seguir mostra o uso dodelete função -

Exemplo

[jerry]$ awk 'BEGIN {
   arr[0] = "One"
   arr[1] = "Two"
   arr[2] = "Three"
   arr[3] = "Four"
   print "Array elements before delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
   delete arr[0]
   delete arr[1]
   print "Array elements after delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
}'

Ao executar este código, você obtém o seguinte resultado -

Resultado

Array elements before delete operation:
One
Two
Three
Four

Array elements after delete operation:
Three
Four

Saída

Esta função interrompe a execução de um script. Ele também aceita um opcionalexprque se torna o valor de retorno de AWK. O exemplo a seguir descreve o uso da função de saída.

Exemplo

[jerry]$ awk 'BEGIN {
   print "Hello, World !!!"
   exit 10
   print "AWK never executes this statement."
}'

Ao executar este código, você obtém o seguinte resultado -

Resultado

Hello, World !!!

fflush

Esta função libera todos os buffers associados ao canal ou arquivo de saída aberto. A sintaxe a seguir demonstra a função.

Sintaxe

fflush([output-expr])

Se nenhum output-expr for fornecido, ele libera a saída padrão. Se output-expr for a string nula (""), ele libera todos os arquivos e canais abertos.

Obter linha

Esta função instrui AWK a ler a próxima linha. O exemplo a seguir lê e exibe omarks.txt arquivo usando a função getline.

Exemplo

[jerry]$ awk '{getline; print $0}' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

O script funciona bem. Mas onde está a primeira linha? Deixe-nos descobrir.

No início, AWK lê a primeira linha do arquivo marks.txt e armazena em $0 variável.

E finalmente, AWK's printdeclaração imprime a segunda linha. Este processo continua até o final do arquivo.

Próximo

o nextfunção muda o fluxo do programa. Isso faz com que o processamento atual do espaço do padrão pare. O programa lê a próxima linha e começa a executar os comandos novamente com a nova linha. Por exemplo, o programa a seguir não executa nenhum processamento quando uma correspondência de padrão é bem-sucedida.

Exemplo

[jerry]$ awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt

Ao executar este código, você obtém o seguinte resultado -

Resultado

1) Amit    Physics   80
2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

nextfile

o nextfilefunção muda o fluxo do programa. Ele interrompe o processamento do arquivo de entrada atual e inicia um novo ciclo por meio de instruções de padrão / procedimentos, começando com o primeiro registro do próximo arquivo. Por exemplo, o exemplo a seguir interrompe o processamento do primeiro arquivo quando uma correspondência de padrão é bem-sucedida.

Primeiro crie dois arquivos. Deixe-nos dizerfile1.txt contém -

file1:str1
file1:str2
file1:str3
file1:str4

E file2.txt contém -

file2:str1
file2:str2
file2:str3
file2:str4

Agora vamos usar a função nextfile.

Exemplo

[jerry]$ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

Resultado

Ao executar este código, você obtém o seguinte resultado -

file1:str1
file2:str1
file2:str2
file2:str3
file2:str4

Retorna

Esta função pode ser usada em uma função definida pelo usuário para retornar o valor. Observe que o valor de retorno de uma função é indefinido se expr não for fornecido. O exemplo a seguir descreve o uso da função de retorno.

Primeiro, crie um functions.awk arquivo contendo o comando AWK conforme mostrado abaixo -

Exemplo

function addition(num1, num2) {
   result = num1 + num2
   return result
}
BEGIN {
   res = addition(10, 20)
   print "10 + 20 = " res
}

Ao executar este código, você obtém o seguinte resultado -

Resultado

10 + 20 = 30

sistema

Esta função executa o comando especificado e retorna seu status de saída. Um status de retorno 0 indica que a execução de um comando foi bem-sucedida. Um valor diferente de zero indica uma falha na execução do comando. Por exemplo, o exemplo a seguir exibe a data atual e também mostra o status de retorno do comando.

Exemplo

[jerry]$ awk 'BEGIN { ret = system("date"); print "Return value = " ret }'

Ao executar este código, você obtém o seguinte resultado -

Resultado

Sun Dec 21 23:16:07 IST 2014
Return value = 0