Como usar awk para filtrar texto ou seqüências de caracteres usando ações específicas de padrão

Como usar awk para filtrar texto ou seqüências de caracteres usando ações específicas de padrão

Na terceira parte da série de comando AWK, vamos dar uma olhada na filtragem de texto ou strings com base em padrões específicos que um usuário pode definir.

Às vezes, ao filtrar o texto, você deseja indicar certas linhas de um arquivo de entrada ou linhas de strings com base em uma determinada condição ou usando um padrão específico que pode ser correspondido. Fazendo isso com Awk é muito fácil, é uma das grandes características de Awk que você achará útil.

Vamos dar uma olhada em um exemplo abaixo, digamos que você tem uma lista de compras para itens alimentares que deseja comprar, chamado Food_prices.lista. Tem a seguinte lista de itens alimentares e seus preços.

$ Cat Food_Pres.lista  Nenhum item_name Quantidade Preço 1 mangas 10 $ 2.45 2 maçãs 20 $ 1.50 3 bananas 5 $ 0.90 4 abacaxi 10 $ 3.46 5 laranjas 10 $ 0.78 6 tomates 5 $ 0.55 7 cebolas 5 $ 0.45 

E então, você quer indicar um (*) assine itens alimentares cujo preço é maior que $ 2, Isso pode ser feito executando o seguinte comando:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ print $ 1, $ 2, $ 3, $ 4, " *";  / *$ [0-1] \.[0-9] [0-9] */ print;  'Food_prices.lista 
Imprimir itens cujo preço é maior que US $ 2

Da saída acima, você pode ver que existe um (*) assine no final das linhas com itens alimentares, mangas e abacaxi. Se você verificar os preços deles, eles estão acima $ 2.

Neste exemplo, usamos dois padrões:

  1. o primeiro: / *\ $ [2-9] \.[0-9] [0-9] */ recebe as linhas que têm preço do item alimentar maior que $ 2 e
  2. o segundo: /*\ $ [0-1] \.[0-9] [0-9] */ procura linhas com preço de item alimentar menor que $ 2.

É o que acontece, existem quatro campos no arquivo, quando o padrão um encontra uma linha com o preço do item alimentar maior que $ 2, Ele imprime todos os quatro campos e um (*) assine no final da linha como uma bandeira.

O segundo padrão simplesmente imprime as outras linhas com preço de alimento menor que $ 2 como eles aparecem no arquivo de entrada, Food_prices.lista.

Dessa forma, você pode usar ações específicas do padrão para filtrar itens alimentares que têm preços acima $ 2, Embora exista um problema com a saída, as linhas que têm o (*) O sinal não está formatado como o restante das linhas, deixando a saída não clara o suficiente.

Vimos o mesmo problema na Parte 2 da série AWK, mas podemos resolvê -lo de duas maneiras:

1. Usando printf Comando que é uma maneira longa e chata usando o comando abaixo:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ printf " %-10s %-10s %-10s %-10s \ n", $ 1, $ 2, $ 3, $ 4 " *";  / *$ [0-1] \.[0-9] [0-9] */ printf " %-10s %-10s %-10s %-10s \ n", $ 1, $ 2, $ 3, $ 4;  'Food_prices.lista 
Filtre e imprima itens usando awk e printf

2. Usando $ 0 campo. Awk usa a variável 0 Para armazenar toda a linha de entrada. Isso é útil para resolver o problema acima e é simples e rápido da seguinte maneira:

$ awk '/ *$ [2-9] \.[0-9] [0-9] */ print $ 0 " *";  / *$ [0-1] \.[0-9] [0-9] */ print;  'Food_prices.lista 
Filtrar e imprimir itens usando awk e variável

Conclusão

É isso por enquanto e essas são maneiras simples de filtrar o texto usando ações específicas de padrão que podem ajudar na sinalização de linhas de texto ou strings em um arquivo usando Awk comando.

Espero que você ache este artigo útil e lembre -se de ler a próxima parte da série, que se concentrará no uso de operadores de comparação usando a ferramenta AWK.