Awk

20 exemplos de awk

20 exemplos de awk

20 exemplos de awk

Existem muitas ferramentas utilitárias no sistema operacional Linux para pesquisar e gerar um relatório de dados de texto ou arquivo. O usuário pode realizar facilmente muitos tipos de pesquisa, substituição e geração de relatórios de tarefas usando os comandos awk, grep e sed. awk não é apenas um comando. É uma linguagem de script que pode ser usada tanto no terminal quanto no arquivo awk. Ele suporta a variável, declaração condicional, array, loops, etc. como outras linguagens de script. Ele pode ler qualquer conteúdo de arquivo linha por linha e separar os campos ou colunas com base em um delimitador específico. Ele também oferece suporte a expressões regulares para pesquisar uma string específica no conteúdo de texto ou arquivo e executa ações se alguma correspondência for encontrada. Como você pode usar o comando e script awk é mostrado neste tutorial usando 20 exemplos úteis.

Conteúdo:

  1. awk com printf
  2. awk para dividir no espaço em branco
  3. awk para alterar o delimitador
  4. awk com dados delimitados por tabulação
  5. awk com dados csv
  6. awk regex
  7. regex não sensível a maiúsculas e minúsculas awk
  8. awk com variável nf (número de campos)
  9. função awk gensub ()
  10. awk com função rand ()
  11. função definida pelo usuário awk
  12. awk se
  13. variáveis ​​awk
  14. arrays awk
  15. loop de awk
  16. awk para imprimir a primeira coluna
  17. awk para imprimir a última coluna
  18. awk com grep
  19. awk com o arquivo de script bash
  20. awk com sed

Usando awk com printf

printf () função é usada para formatar qualquer saída na maioria das linguagens de programação. Esta função pode ser usada com awk comando para gerar diferentes tipos de saídas formatadas. Comando awk usado principalmente para qualquer arquivo de texto. Crie um arquivo de texto chamado empregado.TXT com o conteúdo fornecido abaixo, onde os campos são separados por tabulação ('\ t').

empregado.TXT

1001 John sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Liver 70000

O seguinte comando awk irá ler dados de empregado.TXT arquivo linha por linha e imprime o primeiro arquivo após a formatação. Aqui, "% 10s \ n”Significa que a saída terá 10 caracteres de comprimento. Se o valor da saída for menor que 10 caracteres então os espaços serão adicionados na frente do valor.

$ awk 'printf "% 10s \ n", $ 1' funcionário.TXT

Resultado:

Vá para o conteúdo

awk para dividir no espaço em branco

A palavra ou separador de campo padrão para dividir qualquer texto é o espaço em branco. O comando awk pode receber o valor do texto como entrada de várias maneiras. O texto de entrada é passado de eco comando no exemplo a seguir. O texto, 'Eu gosto de programação'será dividido pelo separador padrão, espaço, e a terceira palavra será impressa como saída.

$ echo 'Gosto de programar' | awk 'print $ 3'

Resultado:

Vá para o conteúdo

awk para alterar o delimitador

O comando awk pode ser usado para alterar o delimitador de qualquer conteúdo de arquivo. Suponha que você tenha um arquivo de texto chamado telefone.TXT com o seguinte conteúdo, onde ':' é usado como separador de campo do conteúdo do arquivo.

telefone.TXT

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Execute o seguinte comando awk para alterar o delimitador, ':' de '-' ao conteúdo do arquivo, telefone.TXT.

telefone $ cat.TXT
$ awk '$ 1 = $ 1' FS = ":" OFS = "-" telefone.TXT

Resultado:

Vá para o conteúdo

awk com dados delimitados por tabulação

O comando awk tem muitas variáveis ​​incorporadas que são usadas para ler o texto de diferentes maneiras. Dois deles são FS e OFS. FS é o separador de campo de entrada e OFS são variáveis ​​separadoras de campo de saída. Os usos dessas variáveis ​​são mostrados nesta seção. Criar uma aba arquivo separado denominado entrada.TXT com o seguinte conteúdo para testar os usos de FS e OFS variáveis.

Entrada.TXT

Linguagem de script do lado do cliente
Linguagem de script do lado do servidor
Servidor de banco de dados
Servidor web

Usando a variável FS com guia

O seguinte comando irá dividir cada linha de entrada.TXT arquivo baseado na guia ('\ t') e imprime o primeiro campo de cada linha.

$ awk 'print $ 1' FS = '\ t' entrada.TXT

Resultado:

Usando a variável OFS com guia

O seguinte comando awk irá imprimir o 9º e 5º campos de 'ls -l' saída do comando com separador de tabulação após imprimir o título da coluna “Nome" e "Tamanho”. Aqui, OFS variável é usada para formatar a saída por uma guia.

$ ls -l
$ ls -l | awk -v OFS = '\ t' 'BEGIN printf "% s \ t% s \ n", "Nome", "Tamanho" print $ 9, $ 5'

Resultado:

Vá para o conteúdo

awk com dados CSV

O conteúdo de qualquer arquivo CSV pode ser analisado de várias maneiras usando o comando awk. Crie um arquivo CSV chamado 'cliente.csv'Com o seguinte conteúdo para aplicar o comando awk.

cliente.TXT

Id, nome, e-mail, telefone
1, Sophia, [email protegido], (862) 478-7263
2, Amelia, [e-mail protegido], (530) 764-8000
3, Emma, ​​[email protegido], (542) 986-2390

Lendo um único campo do arquivo CSV

'-F' opçãoéusada com o comando awk para definir o delimitador para dividir cada linha do arquivo. O seguinte comando awk irá imprimir o nome Campo de o consumidor.csv Arquivo.

cliente $ cat.csv
$ awk -F "," 'print $ 2' cliente.csv

Resultado:

Ler vários campos combinando com outro texto

O seguinte comando irá imprimir três campos de cliente.csv combinando o texto do título, Nome, e-mail e telefone. A primeira linha do cliente.csv arquivo contém o título de cada campo. NR variável contém o número da linha do arquivo quando o comando awk analisa o arquivo. Neste exemplo, o NR variável é usada para omitir a primeira linha do arquivo. A saída mostrará os 2WL, 3rd e 4º campos de todas as linhas exceto a primeira linha.

$ awk -F "," 'NR> 1 print "Nome:" $ 2 ", Email:" $ 3 ", Telefone:" $ 4' cliente.csv

Resultado:

Lendo arquivo CSV usando um script awk

O script awk pode ser executado executando um arquivo awk. Como você pode criar um arquivo awk e executar o arquivo é mostrado neste exemplo. Crie um arquivo chamado awkcsv.awk com o seguinte código. COMEÇAR palavra-chave é usada no script para informar o comando awk para executar o script do COMEÇAR parte primeiro antes de executar outras tarefas. Aqui, separador de campo (FS) é usado para definir o delimitador de divisão e 2WL e 1st os campos serão impressos de acordo com o formato usado na função printf ().

awkcsv.awk
BEGIN FS = "," printf "% 5s (% s) \ n", $ 2, $ 1

Corre awkcsv.awk arquivo com o conteúdo de o consumidor.csv arquivo pelo seguinte comando.

$ awk -f awkcsv.cliente awk.csv

Resultado:

Vá para o conteúdo

awk regex

A expressão regular é um padrão usado para pesquisar qualquer string em um texto. Diferentes tipos de tarefas complicadas de pesquisa e substituição podem ser feitas facilmente usando a expressão regular. Alguns usos simples da expressão regular com o comando awk são mostrados nesta seção.

Conjunto de caracteres correspondente

O seguinte comando irá corresponder à palavra Tolo ou bool ou Frio com a string de entrada e imprimir se a palavra for encontrada. Aqui, Boneca não vai combinar e não imprimir.

$ printf "Tolo \ nCool \ nBoneca \ nbool" | awk '/ [FbC] ool /'

Resultado:

Procurando string no início da linha

'^' o símbolo é usado na expressão regular para pesquisar qualquer padrão no início da linha. 'Linux ' a palavra será pesquisada no início de cada linha do texto no seguinte exemplo. Aqui, duas linhas começam com o texto, 'Linux'e essas duas linhas serão mostradas na saída.

$ echo -e "O Linux é gratuito para usar \ n É um software de código aberto \ nLinuxHint é
um blog popular "| awk '/ ^ Linux /'

Resultado:

Pesquisando string no final da linha

'$' o símboloéusado na expressão regular para pesquisar qualquer padrão no final de cada linha do texto. 'Roteiro'palavra é pesquisada no seguinte exemplo. Aqui, duas linhas contêm a palavra, Roteiro no final da linha.

$ echo -e "PHP Script \ nJavaScript \ nProgramação Visual" | awk '/ Script $ /'

Resultado:

Pesquisar omitindo um conjunto de caracteres específico

'^' o símbolo indica o início do texto quando é usado na frente de qualquer padrão de string ('/ ^… /') ou antes de qualquer conjunto de caracteres declarado por ^ […]. Se o '^' símbolo é usado dentro do terceiro colchete, [^…] então o conjunto de caracteres definido dentro do colchete será omitido no momento da pesquisa. O seguinte comando irá pesquisar qualquer palavra que não comece com 'F' mas terminando com 'ool'. Frio e bool será impresso de acordo com o padrão e os dados de texto.

$ printf "Tolo \ nCool \ nBoneca \ nbool" | awk '/ [^ F] ool /'

Resultado:

Vá para o conteúdo

regex não sensível a maiúsculas e minúsculas awk

Por padrão, a expressão regular faz uma pesquisa com distinção entre maiúsculas e minúsculas ao pesquisar qualquer padrão na string. A pesquisa sem distinção entre maiúsculas e minúsculas pode ser feita pelo comando awk com a expressão regular. No exemplo a seguir, abaixar() função é usada para fazer pesquisas que não diferenciam maiúsculas de minúsculas. Aqui, a primeira palavra de cada linha do texto de entrada será convertida para minúsculas usando abaixar() função e correspondência com o padrão de expressão regular. toupper () função também pode ser usada para este fim, neste caso, o padrão deve ser definido por todas as letras maiúsculas. O texto definido no exemplo a seguir contém a palavra pesquisada, 'rede'em duas linhas que serão impressas como saída.

$ echo -e "Web Design \ nweb development \ nFramework" | awk 'tolower ($ 0) ~ / ^ web /;'

Resultado:

Vá para o conteúdo

awk com variável NF (número de campos)

NF éuma variável incorporada do comando awk queéutilizada para contar o número total de campos em cada linha do texto de entrada. Crie qualquer arquivo de texto com várias linhas e várias palavras. a entrada.TXT arquivo é usado aqui, o qual é criado no exemplo anterior.

Usando NF na linha de comando

Aqui, o primeiro comando é usado para exibir o conteúdo de entrada.TXT arquivo e o segundo comando é usado para mostrar o número total de campos em cada linha do arquivo usando NF variável.

entrada de $ cat.TXT
entrada $ awk 'print NF'.TXT

Resultado:

Usando NF em arquivo awk

Crie um arquivo awk chamado contar.awk com o script dado abaixo. Quando este script for executado com quaisquer dados de texto, o conteúdo de cada linha com o total de campos será impresso como saída.

contar.awk

imprimir $ 0
imprimir "[Total de campos:" NF "]"

Execute o script com o seguinte comando.

$ awk -f count.entrada awk.TXT

Resultado:

Vá para o conteúdo

função awk gensub ()

getub () é uma função de substituição que é usada para pesquisar string com base em determinado delimitador ou padrão de expressão regular. Esta função é definida em  'gawk' pacote que não é instalado por padrão. A sintaxe para esta função é fornecida abaixo. O primeiro parâmetro contém o padrão de expressão regular ou delimitador de pesquisa, o segundo parâmetro contém o texto de substituição, o terceiro parâmetro indica como a pesquisa será feita e o último parâmetro contém o texto no qual esta função será aplicada.

Sintaxe:

gensub (regexp, substituição, como [, destino])

Execute o seguinte comando para instalar embasbacar pacote para usar getub () função com comando awk.

$ sudo apt-get install gawk

Crie um arquivo de texto chamado 'informações de vendas.TXT'com o seguinte conteúdo para praticar este exemplo. Aqui, os campos são separados por uma guia.

informações de vendas.TXT

Seg 700000
Ter 800000
Quarta 750000
Qui 200000
Sex 430000
Sáb 820000

Execute o seguinte comando para ler os campos numéricos do informações de vendas.TXT arquivar e imprimir o valor total de todas as vendas. Aqui, o terceiro parâmetro, 'G' indica a pesquisa global. Isso significa que o padrão será pesquisado em todo o conteúdo do arquivo.

$ awk 'x = gensub ("\ t", "", "G", $ 2); printf x "+" END print 0 'salesinfo.txt | bc -l

Resultado:

Vá para o conteúdo

awk com função rand ()

rand () função é usada para gerar qualquer número aleatório maior que 0 e menor que 1. Então, ele sempre gerará um número fracionário menor que 1. O seguinte comando irá gerar um número aleatório fracionário e multiplicar o valor por 10 para obter um número maior que 1. Um número fracionário com dois dígitos após o ponto decimal será impresso para aplicar a função printf (). Se você executar o seguinte comando várias vezes, você obterá resultados diferentes a cada vez.

$ awk 'BEGIN printf "Número é =%.2f \ n ", rand () * 10 '

Resultado:

Vá para o conteúdo

função definida pelo usuário awk

Todas as funções usadas nos exemplos anteriores são funções integradas. Mas você pode declarar uma função definida pelo usuário em seu script awk para fazer qualquer tarefa particular.  Suponha que você deseja criar uma função personalizada para calcular a área de um retângulo. Para fazer esta tarefa, crie um arquivo chamado 'área.awk'com o seguinte script. Neste exemplo, uma função definida pelo usuário chamada área() é declarado no script que calcula a área com base nos parâmetros de entrada e retorna o valor da área. Obter linha comando é usado aqui para obter a entrada do usuário.

área.awk

# Calcular área
área de função (altura, largura)
altura de retorno * largura

# Inicia a execução
COMEÇAR
print "Insira o valor da altura:"
getline h < "-"
print "Insira o valor da largura:"
getline w < "-"
imprimir "Área =" área (h, w)

Execute o script.

$ awk -f area.awk

Resultado:

Vá para o conteúdo

awk if example

awk suporta declarações condicionais como outras linguagens de programação padrão. Três tipos de instruções if são mostrados nesta seção usando três exemplos. Crie um arquivo de texto chamado Itens.TXT com o seguinte conteúdo.

Itens.TXT

HDD Samsung $ 100
Mouse A4Tech
Impressora HP $ 200

Exemplo simples de if:

O seguinte comando irá ler o conteúdo do Itens.TXT arquivo e verifique o 3rd valor do campo em cada linha. Se o valor estiver vazio, ele irá imprimir uma mensagem de erro com o número da linha.

$ awk 'if ($ 3 == "") print "Falta o campo Preço nos itens da linha" NR'.TXT

Resultado:

exemplo if-else:

O comando a seguir imprimirá o preço do item se o 3rd campo existe na linha, caso contrário, ele irá imprimir uma mensagem de erro.

$ awk 'if ($ 3 == "") print "Falta o campo Preço"
caso contrário, imprima "o preço do item é" $ 3 itens.TXT

Resultado:

exemplo if-else-if:

Quando o seguinte comando for executado a partir do terminal, ele receberá a entrada do usuário. O valor de entrada será comparado com cada condição if até que a condição seja verdadeira. Se alguma condição se tornar verdadeira, ele imprimirá a nota correspondente. Se o valor de entrada não corresponder a nenhuma condição, a impressão falhará.

$ awk 'BEGIN print "Insira a marca:"
marca de getline <  "-"
se (marca> = 90) imprimir "A +"
else if (mark> = 80) print "A"
else if (mark> = 70) print "B +"
senão imprimir "Falha" '

Resultado:

Vá para o conteúdo

variáveis ​​awk

A declaração da variável awk é semelhante à declaração da variável shell. Há uma diferença na leitura do valor da variável. O símbolo '$' é usado com o nome da variável para a variável shell para ler o valor. Mas não há necessidade de usar '$' com a variável awk para ler o valor.

Usando uma variável simples:

O seguinte comando irá declarar uma variável chamada 'local' e um valor de string é atribuído a essa variável. O valor da variável é impresso na próxima declaração.

$ awk 'BEGIN site = "LinuxHint.com "; imprimir site '

Resultado:

Usando uma variável para recuperar dados de um arquivo

O seguinte comando irá pesquisar a palavra 'Impressora' no arquivo Itens.TXT. Se alguma linha do arquivo começar com 'Impressora'então armazenará o valor de 1st, 2WL e 3rd campos em três variáveis. nome e preço variáveis ​​serão impressas.

$ awk '/ Impressora / nome = $ 1; marca = $ 2; preço = $ 3; imprimir "nome do item =" nome;
imprimir "preço do item =" preço 'itens.TXT

Resultado:

Vá para o conteúdo

arrays awk

Ambos os arrays numéricos e associados podem ser usados ​​no awk. A declaração da variável array no awk é a mesma para outras linguagens de programação. Alguns usos de matrizes são mostrados nesta seção.

Matriz associativa: 

O índice do array será qualquer string para o array associativo.  Neste exemplo, uma matriz associativa de três elementos é declarada e impressa.

$ awk 'BEGIN
books ["Web Design"] = "Aprendendo HTML 5";
books ["Programação Web"] = "PHP e MySQL"
books ["PHP Framework"] = "Aprendendo Laravel 5"
printf "% s \ n% s \ n% s \ n", livros ["Design da Web"], livros ["Programação da Web"],
livros ["PHP Framework"] '

Resultado:

Matriz Numérica:

Uma matriz numérica de três elementos é declarada e impressa separando a tabulação.

$ awk 'BEGIN
número [0] = 80;
número [1] = 55;
número [2] = 76;

# print array elements
printf "Valores de matriz:% d \ t% d \ t% d \ n", número [0], número [1], número [2]; '

Resultado:

Vá para o conteúdo

loop de awk

Três tipos de loops são suportados pelo awk. Os usos desses loops são mostrados aqui usando três exemplos.

Loop While:

O loop while que é usado no comando a seguir irá iterar 5 vezes e sair do loop para a instrução break.

$ Awk 'BEGIN n = 1; enquanto (n <= 10) if(n > 5) pausa; imprimir n; n ++ '

Resultado:

Para loop:

O loop for usado no seguinte comando awk irá calcular a soma de 1 a 10 e imprimir o valor.

$ awk 'BEGIN soma = 0; para (n = 1; n <= 10; n++) sum=sum+n; print sum '

Resultado:

Loop Do-while:

um ciclo do-while do seguinte comando irá imprimir todos os números pares de 10 a 5.

$ awk 'BEGIN contador = 10; fazer if (contador% 2 == 0) imprimir contador; balcão--
while (contador> 5) '

Resultado:

Vá para o conteúdo

awk para imprimir a primeira coluna

A primeira coluna de qualquer arquivo pode ser impressa usando a variável $ 1 no awk. Mas se o valor da primeira coluna contém várias palavras, então apenas a primeira palavra da primeira coluna é impressa. Usando um delimitador específico, a primeira coluna pode ser impressa corretamente. Crie um arquivo de texto chamado alunos.TXT com o seguinte conteúdo. Aqui, a primeira coluna contém o texto de duas palavras.

Alunos.TXT

Kaniz Fatema 30º lote
Abir Hossain 35º lote
John Abraham 40º lote

Execute o comando awk sem qualquer delimitador. A primeira parte da primeira coluna será impressa.

$ awk 'print $ 1' alunos.TXT

Execute o comando awk com o seguinte delimitador. A parte completa da primeira coluna será impressa.

$ awk -F '\\ s \\ s' 'print $ 1' alunos.TXT

Resultado:

Vá para o conteúdo

awk para imprimir a última coluna

$ (NF) variável pode ser usada para imprimir a última coluna de qualquer arquivo. Os seguintes comandos awk irão imprimir a última parte e parte completa da última coluna de os estudantes.TXT Arquivo.

$ awk 'print $ (NF)' alunos.TXT
$ awk -F '\\ s \\ s' 'print $ (NF)' alunos.TXT

Resultado:

Vá para o conteúdo

awk com grep

grep é outro comando útil do Linux para pesquisar conteúdo em um arquivo baseado em qualquer expressão regular. Como os comandos awk e grep podem ser usados ​​juntos é mostrado no seguinte exemplo. grep comando é usado para pesquisar informações da id do funcionário, '1002' a partir de o empregado.TXT Arquivo. A saída do comando grep será enviada para awk como dados de entrada. O bônus de 5% será contado e impresso com base no salário do funcionário id, '1002 ' por comando awk.

empregado $ cat.TXT
funcionário $ grep '1002'.txt | awk -F '\ t' 'print $ 2 "receberá $" ($ 3 * 5) / 100 "bônus"'

Resultado:

Vá para o conteúdo

awk com arquivo BASH

Como outro comando do Linux, o comando awk também pode ser usado em um script BASH. Crie um arquivo de texto chamado clientes.TXT com o seguinte conteúdo. Cada linha deste arquivo contém informações em quatro campos. Estes são o ID do cliente, o nome, o endereço e o número do celular separados por '/'.

clientes.TXT

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, VALLECITO, Califórnia / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Crie um arquivo bash chamado item_search.bash com o seguinte script. De acordo com este script, o valor do estado será obtido do usuário e pesquisado em os clientes.TXT arquivo por grep comando e passado para o comando awk como entrada. O comando Awk irá ler 2WL e 4º campos de cada linha. Se o valor de entrada corresponder a qualquer valor de estado de clientes.TXT arquivo, então ele irá imprimir o arquivo do cliente nome e número de telemóvel, caso contrário, imprimirá a mensagem “Nenhum cliente encontrado”.

item_search.bash

#!/ bin / bash
echo "Digite o nome do estado:"
ler estado
clientes = 'grep "$ state" clientes.txt | awk -F "/" 'print "Nome do cliente:" $ 2, ",
Número do celular: "$ 4 ''
if ["$ clientes" != ""]; então
echo $ customers
senão
echo "Nenhum cliente encontrado"
fi

Execute os seguintes comandos para mostrar as saídas.

clientes $ cat.TXT
$ bash item_search.bash

Resultado:

Vá para o conteúdo

awk com sed

Outra ferramenta de pesquisa útil do Linux é sed. Este comando pode ser usado para pesquisar e substituir o texto de qualquer arquivo. O exemplo a seguir mostra o uso do comando awk com sed comando. Aqui, o comando sed irá pesquisar todos os nomes de funcionários que começam com 'J'e passa para o comando awk como entrada. awk imprimirá funcionário nome e EU IA após a formatação.

empregado $ cat.TXT
Funcionário $ sed -n '/ J / p'.txt | awk -F '\ t' 'printf "% s (% s) \ n", $ 2, $ 1'

Resultado:

Vá para o conteúdo

Conclusão:

Você pode usar o comando awk para criar diferentes tipos de relatórios com base em quaisquer dados tabulares ou delimitados após filtrar os dados corretamente. Espero que você possa aprender como o comando awk funciona depois de praticar os exemplos mostrados neste tutorial.

Os 10 melhores jogos para jogar no Ubuntu
A plataforma Windows tem sido uma das plataformas dominantes para jogos devido à grande porcentagem de jogos que estão sendo desenvolvidos hoje para o...
5 melhores jogos de arcade para Linux
Hoje em dia, os computadores são máquinas sérias usadas para jogos. Se você não pode obter a nova pontuação máxima, você saberá o que quero dizer. Nes...
Batalha por Wesnoth 1.13.6 Desenvolvimento lançado
Batalha por Wesnoth 1.13.6 lançado no mês passado, é o sexto lançamento de desenvolvimento no 1.13.série x e oferece uma série de melhorias, principal...