fbpx

Comandos Linux – Comando awk

Comando awk do Linux

Atualizado: 05/04/2019 por Computer Hope

comando awk

Em sistemas operacionais do tipo Unix, o comando awk executa o AWK, uma linguagem de programação de processamento de texto.

Este documento cobre a versão GNU / Linux do AWK, gawk . Nos sistemas Linux, o comando awk geralmente é um link simbólico para o arquivo executável / usr / bin / gawk .

Descrição

Abreviação de “Aho, Weinberger e Kernighan”, AWK é uma linguagem de programação interpretada que se concentra no processamento de texto.

O AWK foi desenvolvido na década de 1970 no Bell Labs por Alfred Aho, Peter Weinberger e Brian Kernighan . Ele foi projetado para executar operações complexas de correspondência de padrões em fluxos de dados textuais. Faz uso intenso de strings , matrizes associativas e expressões regulares e é imensamente útil para analisar dados do sistema e gerar relatórios automáticos.

O AWK é um antecessor direto do Perl e ainda é muito útil em sistemas modernos. O projeto de software livre GNU distribui uma versão de código aberto do AWK chamada gawk .

Sintaxe

  awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ... ]

Argumentos

-F fsDefine o separador do campo de entrada para a expressão regular fs .
-v var=value Atribui o valor do valor à variável var antes de executar o programa awk.
‘prog’Um programa awk .
-f progfileEspecifique um arquivo, progfile , que contém o programa awk a ser executado.
file …Um arquivo a ser processado pelo programa awk especificado.

visão global

O Awk verifica cada arquivo de entrada em busca de linhas que correspondam a qualquer conjunto de padrões especificados literalmente em prog ou em um ou mais arquivos especificados como -f progfile . Com cada padrão, pode haver uma ação associada que será executada quando uma linha de um arquivo corresponder ao padrão. Cada linha é comparada com a parte do padrão de cada instrução de ação do padrão; a ação associada é executada para cada padrão correspondido. O nome do arquivo ”  ” (um traço) instrui o awk a ler a partir da entrada padrão . A opção -v seguida de var = value é uma atribuição a ser feita antes da execução do prog ; qualquer número de opções -v pode estar presente. A opção -F fs define o separador do campo de entrada como a expressão regular fs .

Uma linha de entrada é normalmente composta de campos separados por espaços em branco ou pela expressão regular fs . Os campos são indicados como $ 1, $ 2, … , enquanto $ 0 se refere à linha inteira. Se fs for nulo, a linha de entrada é dividida em um campo por caractere .

Uma instrução de ação padrão tem o formato

  pattern { action }

Uma { ação } ausente significa imprimir a linha; se nenhum padrão for especificado, ele sempre corresponderá. As instruções de ação padrão são separadas por novas linhas ou ponto e vírgula.

Uma ação é uma sequência de instruções. Uma declaração pode ser uma das seguintes:

  If( expression ) statement [ else statement ]
  while( expression ) statement
  for( expression ; expression ; expression ) statement
  for( var in array ) statement
  do statement while( expression )
  break
  continue
  { [ statement ... ] }
  expression
  print [ expression-list ] [ > expression ]
  printf format [ , expression-list ] [ > expression ]
 return [ expression ]
  next

(pula os padrões restantes nesta linha de entrada)

  nextfile

(pula o restante deste arquivo, abre em seguida, inicia no topo)

  delete array[ expression ]

(exclui um elemento da matriz)

  delete array

(exclui todos os elementos da matriz)

  exit [ expression ]

(sai imediatamente; status de saída é a avaliação da expressão )

As declarações são encerradas por ponto-e-vírgula, novas linhas ou chaves à direita. Uma lista de expressões vazia significa $ 0 . As constantes de seqüência de caracteres são citadas “” , com as fugas comuns de C reconhecidas. As expressões assumem valores numéricos ou de seqüência de caracteres, conforme apropriado, e são criadas usando os operadores + ,  , * , / , % , ^ (exponenciação) e concatenação (indicado por espaço em branco).

operadores ! ++ ,  , + = , – = , * = , / = , % = , ^ = , > , > = , < , <= , == ,! = e ?: também estão disponíveis nas expressões. As variáveis ​​podem ser escalares, elementos de matriz (denotados x [i] ) ou campos. Variáveis ​​são inicializadas para a cadeia nula . Os subscritos de matriz podem ser qualquer sequência, não necessariamente numéricos; isso permite uma forma de memória associativa. Múltiplos subscritos como [i, j, k] são permitidos; os constituintes são concatenados, separados pelo valor de SUBSEP .

A instrução print imprime seus argumentos na saída padrão (ou em um arquivo se > file ou >> estiver presente ou em um pipe se | cmd estiver presente), separados pelo separador de campos de saída atual e finalizados pelo separador de registros de saída . file e cmd podem ser nomes literais ou expressões entre parênteses; valores de sequência idênticos em diferentes instruções indicam o mesmo arquivo aberto. A instrução printf formata sua lista de expressões de acordo com o formato (consulte printf ). A função interna close (expr) fecha o arquivo ou pipe expr . A função interna fflush (expr) libera qualquer saída em buffer para o arquivo ou pipe expr .

As funções matemáticas exp , log , sqrt , sin , cos e atan2 estão embutidas. Outras funções embutidas:

 lengthO comprimento de seu argumento usado como uma string ou $ 0 se não houver argumento.
 randNúmero aleatório entre 0 e 1
 srandDefine a semente para rand e retorna a semente anterior.
 intTrunca para um valor inteiro
 substr ( s , m , n )A substring de n- caractere de s que começa na posição m contada a partir de 1.
 index(st)A posição em s onde a sequência t ocorre ou 0 se não ocorrer.
 match(s, r)A posição em s onde a expressão regular r ocorre ou 0 se não ocorrer. As variáveis RSTART e RLENGTH são definidas para a posição e o comprimento da sequência correspondente.
 split(s, a, fs)Divide a string s em elementos da matriz a [1], a [2], …, a [ n ] e retorna n . A separação é feita com a expressão regular fs ou com o separador de campo FS se fs não for fornecido. Uma sequência vazia como separador de campo divide a sequência em um elemento da matriz por caractere.
 sub ( r , t , s )Substitui t pela primeira ocorrência da expressão regular r na sequência s . Se s não for fornecido, $ 0 será usado.
 gsubO mesmo que sub, exceto que todas as ocorrências da expressão regular são substituídas; sub e gsub retornam o número de substituições.
 sprintf ( fmt , expr , … )A sequência resultante da formatação expr … de acordo com o formato printf fmt
 system(cmd)Executa o cmd e retorna seu status de saída
 tolower ( str )Retorna uma cópia de str com todos os caracteres maiúsculos traduzidos para seus equivalentes minúsculos correspondentes.
 toupper ( str )Retorna uma cópia de str com todos os caracteres minúsculos traduzidos para seus equivalentes maiúsculos correspondentes.

A função getline define $ 0 para o próximo registro de entrada do arquivo de entrada atual; O arquivo getline < define $ 0 para o próximo registro do arquivo. getline x define a variável x . Finalmente, cmd | getline canaliza a saída do cmd para o getline ; cada chamada de getline retorna a próxima linha de saída do cmd . Em todos os casos, getline retorna 1 para uma entrada bem-sucedida, 0 para final de arquivo e -1 para um erro.

Padrões são combinações booleanas arbitrárias (com ! || && ) de expressões regulares e expressões relacionais. Expressões regulares são como definidas em re_format . Expressões regulares isoladas em um padrão se aplicam a toda a linha. Expressões regulares também podem ocorrer em expressões relacionais, usando os operadores ~ e ! ~ . / re / é uma expressão regular constante; qualquer string (constante ou variável) pode ser usada como expressão regular, exceto na posição de uma expressão regular isolada em um padrão.

Um padrão pode consistir em dois padrões separados por vírgula; nesse caso, a ação é executada para todas as linhas de uma ocorrência do primeiro padrão a uma ocorrência do segundo.

Uma expressão relacional é uma das seguintes:

  expressão matchop expressão regular
  expressão relançar expressão
  expressão em nome da matriz
  ( expr , expr , ...) no nome da matriz

onde um relop é um dos seis operadores relacionais em C e um matchop é ~ (correspondências) ou ! ~ (não corresponde). Condicional é uma expressão aritmética, uma expressão relacional ou uma combinação booleana deles.

Os padrões especiais BEGIN e END podem ser usados ​​para capturar o controle antes que a primeira linha de entrada seja lida e depois da última. BEGIN e END não combinam com outros padrões.

Nomes de variáveis ​​com significados especiais:

CONVFMTFormato de conversão usado ao converter números (padrão: % .6g ).
 FSExpressão regular usada para separar campos; também configurável pela opção -F fs .
 NFNúmero de campos no registro atual.
 NRNúmero ordinal do registro atual.
 FNRNúmero ordinal do registro atual no arquivo atual.
 FILENAME O nome do arquivo de entrada atual.
 RSSeparador de registros de entrada (padrão: nova linha).
 OFSSeparador de campos de saída (padrão: em branco).
 ORSSeparador de registros de saída (padrão: nova linha).
 OFMTFormato de saída para números (padrão: % .6g ).
 SUBSEPCaractere para separar vários subscritos (padrão: 034 , que é o código ASCII para aspas duplas).
 ARGCContagem de argumentos, atribuível.
 ARGVMatriz de argumentos, atribuível; membros não nulos são tomados como nomes de arquivos.
 ENVIRONMatriz de variáveis ​​de ambiente; subscritos são nomes.

As funções podem ser definidas (na posição de uma instrução de ação padrão) assim:

  função foo ( a , b , c ) {...;  retornar x }

Os parâmetros são passados ​​por valor (se escalar ) ou por referência (se nome da matriz); funções podem ser chamadas recursivamente . Os parâmetros são locais para a função; todas as outras variáveis ​​são globais. Assim, variáveis ​​locais podem ser criadas fornecendo parâmetros em excesso na definição da função.

Exemplos

  awk 'length ($ 0)> 72' text.txt

Imprima apenas as linhas do arquivo text.txt com mais de 72 caracteres.

  awk '{print $ 2, $ 1}' data.txt

Imprima os dois primeiros campos de dados na ordem oposta. Por exemplo, se o arquivo data.txt contiver as linhas:

  maçã vermelha azul berry verde polegar

… então a saída do comando awk acima seria:

  maçã baga vermelha azul polegar verde

A maioria dos programas awk é muito longa para especificar na linha de comando. Se o programa estiver salvo no arquivo prog.awk , o comando abaixo.

  awk -f prog.awk file.txt

O comando acima executa o programa awk em prog.awk para processar o conteúdo do arquivo file.txt .

O restante dos exemplos são apenas os programas awk.

  {s + = $ 1}
 END {print "soma é", s, "média é", s / NR}

Este programa adicionará a primeira coluna do seu arquivo de entrada e imprimirá a soma e a média dos valores.

  / start /, / stop /

Este programa imprimirá todas as linhas de texto encontradas entre ” iniciar ” e ” parar “.

  INÍCIO {
 para (i = 1; i <ARGC; i ++) printf "% s", ARGV [i]
 printf "\ n"
 Saída }

Este programa awk simula o comando echo .

gawk – versão do AWK do GNU.

13 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.