Pesquisa de site

Como usar o Awk para imprimir campos e colunas em arquivo


Nesta parte de nossa série de comandos Linux Awk, daremos uma olhada em um dos recursos mais importantes do Awk, que é a edição de campos.

É bom saber que o Awk divide automaticamente as linhas de entrada fornecidas em campos, e um campo pode ser definido como um conjunto de caracteres que são separados de outros campos por um separador de campo interno.

Se você está familiarizado com Unix/Linux ou faz programação bash shell, então você deve saber o que é a variável separadora de campo interna (IFS). Os IFS padrão no Awk são tabulação e espaço.

É assim que funciona a ideia de separação de campos no Awk: quando ele encontra uma linha de entrada, de acordo com o IFS definido, o primeiro conjunto de caracteres é o campo um, que é acessado usando $1<, o segundo conjunto de caracteres é o campo dois, que é acessado usando $2, o terceiro conjunto de caracteres é o campo três, que é acessado usando $3 e assim por diante até o último conjunto de caracteres.

Para entender melhor essa edição de campos do Awk, vamos dar uma olhada nos exemplos abaixo:

Exemplo 1: Criei um arquivo de texto chamado tecmintinfo.txt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Então, na linha de comando, tento imprimir os campos primeiro, segundo e terceiro do arquivo tecmintinfo.txt >usando o comando abaixo:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

Na saída acima, você pode ver que os caracteres dos três primeiros campos são impressos com base no IFS definido, que é o espaço:

  1. O campo um, “TecMint.com ”, é acessado usando $1.
  2. O campo dois, que é “is ”, é acessado usando $2.
  3. O campo três, que é “o ”, é acessado usando $3.

Se você notou na saída impressa, os valores dos campos não estão separados e é assim que a impressão se comporta por padrão.

Para visualizar a saída claramente com espaço entre os valores dos campos, você precisa adicionar o operador (,) da seguinte forma:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Uma coisa importante a ser observada e sempre lembrada é que o uso de ($) no Awk é diferente de seu uso em scripts de shell.

No shell script, ($) é usado para acessar o valor das variáveis, enquanto no Awk ($) ele é usado apenas para acessar o conteúdo de um campo, mas não para acessar o valor das variáveis.

Exemplo 2: Vamos dar uma olhada em outro exemplo usando um arquivo que contém múltiplas linhas chamado my_shoping.list.

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

Digamos que você queira imprimir apenas Unit_Price de cada item da lista de compras, você precisará executar o comando abaixo:

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awk também possui um comando printf que ajuda você a formatar sua saída, é uma boa maneira, pois você pode ver que a saída acima não é clara o suficiente.

Usando printf para formatar a saída de Item_Name e Unit_Price:

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

Resumo

A edição de campos é muito importante ao usar o Awk para filtrar texto ou strings, pois ajuda a obter dados específicos em colunas de uma lista. E lembre-se sempre que o uso do operador ($) no Awk é diferente daquele no shell scripting.

Espero que o artigo tenha sido útil para você e, para quaisquer informações adicionais necessárias ou dúvidas, você pode postar um comentário na seção de comentários.