Muitas ferramentas de utilitário existem no sistema operacional Linux para pesquisar e gerar um relatório a partir de dados de texto ou arquivo. O usuário pode executar facilmente muitos tipos de pesquisa, substituição e relatório de geração de tarefas usando comandos Awk, Grep e Sed. Awk não é apenas um comando. É uma linguagem de script que pode ser usada no arquivo terminal e awk. Ele suporta a variável, declaração condicional, matriz, loops etc. Como outras línguas 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 suporta expressão regular para pesquisar string específica no conteúdo ou arquivo de texto e toma ações se houver alguma correspondência. Como você pode usar o comando e script AWK é mostrado neste tutorial usando 20 exemplos úteis.
Conteúdo:
Usando awk com printf
printf () A 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 funcionário.TXT com o conteúdo abaixo, onde os campos são separados pela guia ('\ t').
funcionário.TXT
1001 John Sena 40000O comando AWK a seguir lerá dados de funcionário.TXT arquivo de arquivo por linha e imprima o primeiro arquivado após a formatação. Aqui, "%10s \ n”Significa que a saída terá 10 caracteres. Se o valor da saída for inferior a 10 caracteres, os espaços serão adicionados na frente do valor.
$ awk 'printf "%10s \ n", $ 1' funcionário.TXTSaída:
Vá para o conteúdo
Awk para se separar no espaço branco
A palavra padrão ou separador de campo para dividir qualquer texto é espaço branco. O comando AWK pode assumir o valor do texto como entrada de várias maneiras. O texto de entrada é passado de eco comando no exemplo seguinte. O texto, 'Eu gosto de programar'será dividido por separador padrão, espaço, e a terceira palavra será impressa como saída.
$ echo 'eu gosto de programar' | awk 'print $ 3'
Saída:
Vá para o conteúdo
Awk para mudar o delimitador
O comando AWK pode ser usado para alterar o delimitador para qualquer conteúdo de arquivo. Suponha que você tenha um arquivo de texto chamado telefone.TXT com o seguinte conteúdo em que ':' é usado como separador de campo do conteúdo do arquivo.
telefone.TXT
+123: 334: 889: 778Execute o seguinte comando AWK para mudar o delimitador, ':' por '-' para o conteúdo do arquivo, telefone.TXT.
$ CAT Telefone.TXTSaída:
Vá para o conteúdo
Awk com dados delimitados de Tab
O comando AWK tem muitas variáveis internas que são usadas para ler o texto de maneiras diferentes. Dois deles são Fs e OFS. Fs é o separador de campo de entrada e OFS são variáveis de separador de campo de saída. Os usos dessas variáveis são mostrados nesta seção. Criar uma aba arquivo separado nomeado 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 clienteO seguinte comando dividirá cada linha de entrada.TXT arquivo com base na guia ('\ t') e imprima o primeiro campo de cada linha.
$ awk 'print $ 1' fs = '\ t' entrada.TXT
Saída:
O seguinte comando AWK imprimirá o 9º e 5º campos de 'ls -l' saída de comando com o separador de guias após imprimir o título da coluna “Nome" e "Tamanho”. Aqui, OFS A 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", "size" print $ 9, $ 5'
Saída:
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, telefoneLendo um único campo de arquivo CSV
'-F' A opção é usada com o comando AWK para definir o delimitador para dividir cada linha do arquivo. O seguinte comando AWK imprimirá o nome Campo de o cliente.CSV arquivo.
$ CAT CLIENTE.CSV
$ awk -f "," 'Print $ 2' cliente.CSV
Saída:
O comando a seguir imprimirá três campos de cliente.CSV Combinando o texto do título, Nome, e -mail e telefone. A primeira linha do cliente.CSV O arquivo contém o título de cada campo. Nr A variável contém o número da linha do arquivo quando o comando AWK analisa o arquivo. Neste exemplo, o nr A variável é usada para omitir a primeira linha do arquivo. A saída mostrará o 2nd, 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
Saída:
O script AWK pode ser executado executando o arquivo AWK. Como você pode criar arquivo AWK e executar o arquivo é mostrado neste exemplo. Crie um arquivo chamado awkcsv.Awk Com o seguinte código. COMEÇAR A 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 2nd e 1st Os campos serão impressos de acordo com o formato usado na função printf ().
awkcsv.AwkCorrer awkcsv.Awk arquivar com o conteúdo de o cliente.CSV arquivo pelo seguinte comando.
$ awk -f awkcsv.cliente AWK.CSV
Saída:
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 pesquisa e substituição complicados podem ser feitos com muita facilidade 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 corresponderá à palavra Tolo ou bool ou Legal com a sequência de entrada e imprimir se a palavra funda. Aqui, Boneca não combinará e não imprimirá.
$ printf "Fool \ ncOol \ ndoll \ nBool" | awk '/[fbc] ool/'
Saída:
'^' O símbolo é usado na expressão regular para pesquisar qualquer padrão no início da linha. 'Linux ' as palavras serão pesquisadas no início de cada linha do texto no exemplo a seguir. Aqui, duas linhas começam com o texto, 'Linux'E essas duas linhas serão mostradas na saída.
$ echo -e "Linux é livre para usar \ n é um software de código aberto \ nlinuxhint é
Um site popular do blog "| Awk '/^Linux/'
Saída:
'$' O símbolo é usado na expressão regular para pesquisar qualquer padrão no final de cada linha do texto. 'Roteiro'A palavra é pesquisada no exemplo seguinte. Aqui, duas linhas contêm a palavra, Roteiro No final da linha.
$ echo -e "script php \ njavascript \ nvisual Programmation" | awk '/script $/'
Saída:
'^' O símbolo indica o início do texto quando é usado na frente de qualquer padrão de string (' /^… /') ou antes de qualquer personagem definido por ^[…]. Se o '^' O símbolo é usado dentro do terceiro suporte, [^…] Então o personagem definido definido dentro do suporte será omitido no momento da pesquisa. O comando a seguir pesquisará qualquer palavra que não esteja começando 'F' Mas terminando com 'ool'. Legal e bool será impresso de acordo com os dados do padrão e do texto.
$ printf "Fool \ ncOol \ ndoll \ nBool" | awk '/[^f] ool/'Saída:
Vá para o conteúdo
REGEX insensível ao caso Awk
Por padrão, a expressão regular faz pesquisa sensível ao caso ao pesquisar qualquer padrão na string. Pesquisa insensível ao caso pode ser feita pelo comando AWK com a expressão regular. No exemplo seguinte, abaixar() A função é usada para fazer pesquisa insensível ao caso. Aqui, a primeira palavra de cada linha do texto de entrada será convertida em minúsculas, usando abaixar() função e combine com o padrão de expressão regular. toupper () A função também pode ser usada para esse fim, neste caso, o padrão deve ser definido por toda a letra maiúscula. O texto definido no exemplo a seguir contém a palavra de busca, 'rede'Em duas linhas que serão impressas como saída.
$ echo -e "web design \ nweb desenvolvimento \ nframework" | Awk 'TOLOWER ($ 0) ~ /^Web /;'
Saída:
Vá para o conteúdo
Awk com NF (número de campos) variável
Nf é uma variável embutida do comando AWK que é usado 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 O arquivo é usado aqui que é criado no exemplo anterior.
Usando a NF da linha de comando
Aqui, o primeiro comando é usado para exibir o conteúdo de entrada.TXT Arquivo e segundo comando são usados para mostrar o número total de campos em cada linha do arquivo usando Nf variável.
$ CAT Entrada.TXTSaída:
Crie um arquivo AWK nomeado contar.Awk com o script dado abaixo. Quando este script será executado com qualquer dados de texto, cada conteúdo de linha com os campos totais será impresso como saída.
contar.Awk
print $ 0Execute o script pelo seguinte comando.
$ awk -f count.entrada awk.TXT
Saída:
Vá para o conteúdo
Função Awk Gensub ()
getsub () é uma função de substituição usada para pesquisar string com base em delimitador específico 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 é dada abaixo. O primeiro parâmetro contém o padrão de expressão regular ou o 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 em que esta função será aplicada.
Sintaxe:
Gensub (regexp, substituição, como [, destino])
Execute o seguinte comando para instalar Gawk pacote para uso getsub () função com comando awk.
$ sudo apt-get install gawkCrie um arquivo de texto chamado 'SalesInfo.TXT'Com o seguinte conteúdo para praticar este exemplo. Aqui, os campos são separados por uma guia.
SalesInfo.TXT
Seg 700000Execute o seguinte comando para ler os campos numéricos do SalesInfo.TXT Arquive e imprima o valor total de todo o Vendas. Aqui, o terceiro parâmetro, 'g' indica a pesquisa global. Isso significa que o padrão será pesquisado no conteúdo completo do arquivo.
$ awk 'x = gensub ("\ t", "", "g", $ 2); printf x "+" end print 0 'SalesInfo.txt | bc -l
Saída:
Vá para o conteúdo
função Awk com rand ()
rand () A função é usada para gerar qualquer número aleatório maior que 0 e menor que 1. Então, sempre gerará um número fracionário menor que 1. O comando a seguir gerará um número aleatório fracionário e multiplicará o valor com 10 para obter um número mais de 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, terá uma saída diferente toda vez.
$ awk 'BEGN printf "número é =%.2f \ n ", rand ()*10 '
Saída:
Vá para o conteúdo
Função definida pelo usuário AWK
Todas as funções usadas nos exemplos anteriores são funções internas. Mas você pode declarar uma função definida pelo usuário em seu script AWK para fazer qualquer tarefa em particular. Suponha que você queira criar uma função personalizada para calcular a área de um retângulo. Para realizar esta tarefa, crie um arquivo chamado 'área.Awk'Com o seguinte script. Neste exemplo, uma função definida pelo usuário nomeada área() é declarado no script que calcula a área com base nos parâmetros de entrada e retorna o valor da área. Obter linha O comando é usado aqui para obter informações do usuário.
área.Awk
# Calcule a áreaExecute o script.
$ awk -f Area.Awk
Saída:
Vá para o conteúdo
Awk se exemplo
AWK suporta declarações condicionais como outras linguagens de programação padrão. Três tipos de declarações IF são mostradas nesta seção usando três exemplos. Crie um arquivo de texto chamado Unid.TXT com o seguinte conteúdo.
Unid.TXT
HDD Samsung $ 100Simples se exemplo:
ele seguinte o comando lerá o conteúdo do Unid.TXT Arquive e verifique o 3rd valor de campo em cada linha. Se o valor estiver vazio, ele imprimirá uma mensagem de erro com o número da linha.
$ awk 'if ($ 3 == "") impressão "O campo de preços está ausente na linha" nr' itens.TXT
Saída:
O comando a seguir imprimirá o preço do item se o 3rd Existe um campo na linha, caso contrário, imprimirá uma mensagem de erro.
$ awk 'if ($ 3 == "") impressão "Campo de preço está faltando"Saída:
Quando o comando a seguir será executado do terminal, ele receberá informações do usuário. O valor de entrada será comparado com cada condição se até que a condição seja verdadeira. Se alguma condição for verdadeira, ela imprimirá a nota correspondente. Se o valor de entrada não corresponder a nenhuma condição, ele imprimirá falhar.
$ AWK 'BEGIN PRIM "ENTER A MARCA:"
GetLine Mark < "-"
if (mark> = 90) imprimir "a+"
caso contrário, se (marca> = 80) imprimir "a"
caso contrário, se (Mark> = 70) imprima "B+"
caso contrário, imprimir "Fail" '
Saída:
Vá para o conteúdo
variáveis awk
A declaração de variável AWK é semelhante à declaração da variável da concha. 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 variável AWK para ler o valor.
O comando a seguir declarará uma variável nomeada 'site' e um valor de string é atribuído a essa variável. O valor da variável é impresso na próxima declaração.
$ AWK 'BEGN Site = "Linuxhint.com "; site de impressão '
Saída:
O seguinte comando pesquisará a palavra 'Impressora' no arquivo Unid.TXT. Se alguma linha do arquivo começar com 'Impressora'Então ele armazenará o valor de 1st, 2nd e 3rd campos em três variáveis. nome e preço Variáveis serão impressas.
$ awk '/ impressora/ name = $ 1; marca = $ 2; preço = $ 3; print "item name =" name;Saída:
Vá para o conteúdo
Arrays awk
Matrizes numéricas e associadas podem ser usadas em Awk. A declaração variável da matriz no AWK é a mesma para outras linguagens de programação. Alguns usos das matrizes são mostrados nesta seção.
O índice da matriz será qualquer string para a matriz associativa. Neste exemplo, uma variedade associativa de três elementos é declarada e impressa.
$ AWK 'BEGIN
livros ["web design"] = "Aprendendo html 5";
Livros ["Programação da Web"] = "PHP e MySQL"
Livros ["PHP Framework"] = "Aprendendo Laravel 5"
printf "%s \ n%s \ n%s \ n", livros ["web design"], livros ["programação da web"],
Livros ["PHP Framework"] '
Saída:
Uma matriz numérica de três elementos é declarada e impressa pela guia Separando.
$ AWK 'BEGINSaída:
Vá para o conteúdo
Loop Awk
Três tipos de loops são suportados pela AWK. Os usos desses loops são mostrados aqui usando três exemplos.
Enquanto o loop usado no comando a seguir iterará por 5 vezes e sairá do loop para a declaração de quebra.
$ awk 'BEGIN n = 1; enquanto (n 5) quebra; imprimir n; n ++ '
Saída:
Para o loop que é usado no seguinte comando AWK, calculará a soma de 1 a 10 e imprimirá o valor.
$ AWK 'BEGN SUM = 0; para (n = 1; n <= 10; n++) sum=sum+n; print sum '
Saída:
Um loop de fazer-while do comando a seguir imprimirá todos os números pares de 10 a 5.
$ awk 'begin contador = 10; faça if (contador%2 == 0) contador de impressão; contador--
while (contador> 5) '
Saída:
Vá para o conteúdo
Awk para imprimir a primeira coluna
A primeira coluna de qualquer arquivo pode ser impressa usando US $ 1 variável no AWK. Mas se o valor da primeira coluna contiver várias palavras, apenas a primeira palavra das primeiras impressões da coluna. 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º loteExecute o comando AWK sem nenhum 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
Saída:
Vá para o conteúdo
Awk para imprimir a última coluna
$ (NF) A variável pode ser usada para imprimir a última coluna de qualquer arquivo. Os seguintes comandos AWK imprimirão 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
Saída:
Vá para o conteúdo
Awk com grep
Grep é outro comando útil do Linux para pesquisar conteúdo em um arquivo com base em qualquer expressão regular. Como os comandos AWK e Grep podem ser usados juntos é mostrado no exemplo a seguir. grep O comando é usado para pesquisar informações do ID do funcionário '1002' de o empregado.TXT arquivo. A saída do comando Grep será enviada para AWK como dados de entrada. Bônus de 5% será contado e impresso com base no salário do ID do funcionário, '1002 ' pelo comando AWK.
$ CAT Funcionário.TXT
$ GREP '1002' funcionário.txt | awk -f '\ t' 'print $ 2 "receberá $" ($ 3*5)/100 "bônus"' '
Saída:
Vá para o conteúdo
Awk with bash file
Como outro comando Linux, o comando AWK também pode ser usado em um script de 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 ID, nome, endereço e número de celular do cliente que são separados por '/'.
clientes.TXT
AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942Crie um arquivo bash chamado item_search.Bash com o seguinte script. De acordo com este script, o valor do estado será retirado do usuário e pesquisado em os clientes.TXT arquivar por grep comando e passado para o comando AWK como entrada. O comando AWK vai ler 2nd e 4º campos de cada linha. Se o valor de entrada corresponder com qualquer valor de estado de clientes.TXT arquivo então ele imprimirá o cliente nome e número de telemóvel, Caso contrário, ele imprimirá a mensagem “Nenhum cliente encontrado”.
#!/BIN/BASH
eco "Entre no nome do estado:"
Leia o estado
clientes = 'Grep "$ State" Clientes.txt | awk -f "/" 'print "Nome do cliente:" $ 2 ",
Mobile não: "$ 4 ''
Se ["$ clientes" != ""]; então
eco $ clientes
outro
eco "nenhum cliente encontrou"
fi
Execute os seguintes comandos para mostrar as saídas.
$ CAT CLIENTES.TXT
$ Bash Item_search.Bash
Saída:
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 pesquisará todos os nomes dos funcionários começam com 'Je passa para o comando AWK como entrada. Awk irá imprimir funcionários nome e EU IA Após a formatação.
$ CAT Funcionário.TXT
$ sed -n '/j/p' funcionário.txt | awk -f '\ t' 'printf "%s (%s) \ n", $ 2, $ 1'
Saída:
Vá para o conteúdo
Você pode usar o comando AWK para criar diferentes tipos de relatórios com base em 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.