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