![Como ocultar o endereço IP no iPhone](/f/5074efc5813109f7df27cc9c7aebefd0.png?width=100&height=100)
Nesta sexta parte de Awk series, vamos olhar para usar Próximo
comando, que diz Awk para pular todos os padrões e expressões restantes que você forneceu, mas, em vez disso, leia a próxima linha de entrada.
O Próximo
comando ajuda você a evitar a execução do que eu chamaria de etapas de perda de tempo na execução de um comando.
Para entender como funciona, vamos considerar um arquivo chamado food_list.txt que se parece com isto:
Itens da lista de alimentos
Nenhum Item_Name Quantidade de preço. 1 Manga $ 3,45 5. 2 maçãs $ 2,45 25. 3 Abacaxis $ 4,45 55. 4 tomates $ 3,45 25. 5 cebolas $ 1,45 15. 6 Bananas $ 3,45 30.
Considere executar o seguinte comando que sinalizará itens alimentares cuja quantidade seja menor ou igual a 20 com um (*)
sinal no final de cada linha:
# awk '$ 4 <= 20 {printf "% s \ t% s \ n", $ 0, "*"; } $ 4> 20 {print $ 0;} 'food_list.txt Nenhum Item_Name Quantidade de preço. 1 manga $ 3,45 5* 2 maçãs $ 2,45 25. 3 Abacaxis $ 4,45 55. 4 tomates $ 3,45 25 5 cebolas $ 1,45 15* 6 Bananas $ 3,45 30.
O comando acima realmente funciona da seguinte maneira:
(*)
assine no final usando a expressão um: $4 <= 20
$4 > 20
Mas há um problema aqui, quando o primeira expressão é executado, uma linha que queremos sinalizar é impressa usando: {printf "% s \ t% s \ n", $ 0, "**"; }
e então, na mesma etapa, o segunda expressão também é verificado, o que se torna um fator de perda de tempo.
Portanto, não há necessidade de executar a segunda expressão, $4 > 20
novamente após imprimir as linhas já marcadas que foram impressas usando a primeira expressão.
Para lidar com este problema, você deve usar o Próximo
comando da seguinte forma:
# awk '$ 4 <= 20 {printf "% s \ t% s \ n", $ 0, "*"; Próximo; } $ 4> 20 {print $ 0;} 'food_list.txt Nenhum Item_Name Quantidade de preço. 1 manga $ 3,45 5* 2 maçãs $ 2,45 25. 3 Abacaxis $ 4,45 55. 4 tomates $ 3,45 25 5 cebolas $ 1,45 15* 6 Bananas $ 3,45 30.
Depois que uma única linha de entrada é impressa usando $4 <= 20
{printf "% s \ t% s \ n", $ 0, "*"; Próximo; }
, a Próximo
o comando incluído ajudará a pular a segunda expressão $4 > 20
{imprimir $ 0;}
, então a execução vai para a próxima linha de entrada sem ter que perder tempo checando se a quantidade é maior que 20.
O Próximo comando é muito importante é escrever comandos eficientes e, quando necessário, você sempre pode usar para acelerar a execução de um script. Prepare-se para a próxima parte da série, onde veremos como usar a entrada padrão (STDIN) como entrada para Awk.
Espero que você ache este guia útil e que você possa, como sempre, colocar suas idéias por escrito, deixando um comentário na seção de comentários abaixo.