# O comando AWK com if, else e outras opções

Link: [https://blog.ironlinux.com.br/o-comando-awk/](https://blog.ironlinux.com.br/o-comando-awk/)

<div class="row justify-center" id="bkmrk-assim-como-o%C2%A0sed%C2%A0%2C-o" style="text-align: justify;"><article class="lg:col-10">Assim como o [SED](https://blog.ironlinux.com.br/o-comando-sed-no-linux) , o AWK é uma ferramenta para manipulação de texto. No entanto, o AWK também é considerado uma linguagem de programação. Com ele é possível pesquisar palavras num arquivo, identificar padrões, realizar substituições e muito mais! Além disso, o AWK suporta expressões regulares, o que permite realizar matches de padrões complexos.

## Output de exemplo

Antes de tudo, para realizarmos as operações/exemplos com o AWK, vamos utilizar a saída do comando **ps u**:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u

```

<div class="content mb-10"><div class="highlight"></div>[![Output do comando ps](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps_hu180624a0801036315a165abb38b8795b_18750_652x107_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps.png)</div>## 1 | Utilizações básicas

### 1.1 | Printar a primeira coluna

Para apresentar apena a primeira coluna é possível utilizar o comando abaixo. A primeira coluna é representada por **$1**:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk '{print $1}'

```

<div class="content mb-10"><div class="highlight"></div>[![Primeira coluna com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps1_hu40bf0526a869add2d330c0ce6e8f32a6_3217_244x123_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps1.png)</div>### 1.2 | Printar múltiplas colunas

É possível trazer múltiplas colunas utilizando o comando abaixo. OBS: A vírgula neste exemplo representará um espaço comum na saída final:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk '{print $1,$2,$3}'

```

<div class="content mb-10"><div class="highlight"></div>[![Múltiplas colunas com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps2_hu5298a6ce1fe8a70582a96b9331ce6162_9640_274x122_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps2.png)</div>### 1.3 | Printar múltiplas colunas separadas por Tab

Utilizando **"\\t"** é possível separar as colunas com Tab:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk '{print $1 "\t" $2 "\t" $3}'

```

<div class="content mb-10"><div class="highlight"></div>[![Múltiplas colunas separadas por tab com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps3_hucd7d7e596ee68c48a6155cdb16aca5bf_12368_357x127_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps3.png)</div>### 1.4 | Printar o último elemento

Utilizando **$NF** é possível trazer o último elemento (neste caso é a coluna COMMAND):

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk '{print $NF}'

```

<div class="content mb-10"><div class="highlight"></div>[![Último elemento/coluna com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps4_huee13c904e35975e64df63d3931d16746_8004_242x128_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ps4.png)</div>### 1.5 | Ignorar a primeira linha

É comum precisar remover a primeira linha de um arquivo para depois trabalhar com os dados. Para fazer isso, basta utilizar o comando abaixo:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk 'NR!=1'

```

<div class="content mb-10"><div class="highlight"></div>[![Ignorar primeira linha com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awk-1linha_hu05b53ab58852e2b82758cce26f5b64fb_18912_650x113_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awk-1linha.png)</div>### 1.6 | Substituir texto

Para substituir um texto, podemos utilizar a função **sub()**, conforme o exemplo abaixo, que substitui a string “**kali**” por “**outro-usuario**”:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk -e 'sub(/kali/, "outro-usuario")'

```

<div class="content mb-10"><div class="highlight"></div>[![Substituir texto com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awksub_hud9f2e6ec4736187a9a6160a1e1934855_21892_904x98_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awksub.png)</div>OBS: A função **sub()** substitui apenas a primeira ocorrência, uma vez por linha. Caso queira substituir mais de uma ocorrência, utilize a função **gsub()**.

## 2 | Utilizando um outro delimitador

Por padrão, o delimitador do AWK é o espaço (ou tab). No entanto, em alguns casos, você precisará indicar um outro delimitador (como por exemplo **vírgula** ou **ponto e vírgula**). Desta forma, no exemplo abaixo, estamos utilizando **;** como delimitador e printando o segundo elemento:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
echo 'oi;tudo;certo' | awk -F ';' '{print $2}'

```

<div class="content mb-10"><div class="highlight"></div>[![Alterar delimitador AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/delimitador_hud1b700e45a3865556df07ed4908ab68e_8393_415x64_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/delimitador.png)</div>## 3 | Condicionais

### 3.1 | AWK com if

Para exemplificar o uso de condicionais (if) vamos utilizar o arquivo **notas.txt** que possui o seguinte conteúdo:

<div class="content mb-10">[![IF no AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/notas-awk_hu0653596c22c5c588e3e591cfddb13782_7945_235x131_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/notas-awk.png)</div>Por exemplo, para printar a linha inteira se a primeira coluna for a string **Iron**:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
awk '{ if ($1 == "Iron") print $0 }' notas.txt

```

<div class="content mb-10"><div class="highlight"></div>[![Primeira coluna com if no AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/if1_huae5162889fdba2edda79031e243610d0_7955_434x59_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/if1.png)</div>Por exemplo, para printar a nota do aluno **Iron** em uma frase:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
awk '{ if ($1 == "Iron") print "A nota do Aluno", $1, "foi", $2}' notas.txt

```

<div class="content mb-10"><div class="highlight"></div>[![Manipulando output com if no AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/if2_hue5c6a73792c69eb177e191576a99da83_11466_663x63_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/if2.png)</div>### 3.2 | AWK com if/else

No exemplo abaixo estamos utilizando if/else para determinar quais alunos reprovaram ou passaram (com nota maior que 5). Também estamos utilizando **NR!=1** para ignorar a primeira linha:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
awk 'NR!=1 {if ($2 >=5 ) print $0,"=>","Passou!"; else print $0,"=>","Reprovou!"}' notas.txt

```

<div class="content mb-10"><div class="highlight"></div>[![AWK if e else](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ifelse_hu0aea360217126417a164d40544d60609_21178_785x111_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/ifelse.png)</div>## 3.3 | Cheatsheet de condicionais

<div class="content mb-10"><table><thead><tr><th>Condicionais</th><th>Descrição</th></tr></thead><tbody><tr><td>if ($5 &gt;= 10)</td><td>Se a quinta coluna for maior ou igual a 10</td></tr><tr><td>if ($3 == 10)</td><td>Se a terceira coluna for igual a 10</td></tr><tr><td>if ($1 == “Linux”)</td><td>Se a primeira coluna for igual a string **Linux**</td></tr><tr><td>if ($1 == “Linux”</td><td> </td></tr><tr><td>if ($1 ==“Linux” &amp;&amp; $2 &gt; 5)</td><td>Se a primeira coluna for igual a string **Linux** **e** a segunda coluna for **maior** que **5**</td></tr></tbody></table>

</div>## 4 | Utilizando REGEX

### 4.1 | Exemplos com REGEX

Na regex abaixo, estamos printando a linha inteira caso a segunda coluna se inicie com o número 1:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk -e '$2 ~ /^1/ {print $0}'

```

<div class="content mb-10"><div class="highlight"></div>[![Regex com AWK - exemplo 1](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awk-regex_hue8f336504f106075d7913aa5a67af0c9_12306_650x66_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awk-regex.png)</div>Na regex abaixo estamos printando todas as linhas cuja coluna 2 **não** comecem com o número 1:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
ps u | awk -e '$2 !~ /^1/ {print $0}'

```

<div class="content mb-10"><div class="highlight"></div>[![Regex com AWK - exemplo 2](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awk-regex2_hu343e058f96ed749dea6809523cfe1d3e_22855_779x110_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awk-regex2.png)</div>### 4.2 | Cheatsheet de REGEX

<div class="content mb-10"><table><thead><tr><th>Regex</th><th>Descrição</th></tr></thead><tbody><tr><td>\[mr\]</td><td>Letras\*\* m\*\* ou **r**</td></tr><tr><td>\[a-z\]</td><td>Qualquer letra de **a** à **z**</td></tr><tr><td>\[a-zA-Z\]</td><td>Qualquer letra de **A** à **Z** (maiúsculo ou minúsculo)</td></tr><tr><td>\[A-Z0-9\]{5}</td><td>5 caracteres, podendo ser qualquer letra de A à Z ou números de 0 a 9</td></tr></tbody></table>

</div>## 5 | Alguns outros usos interessantes

### 5.1 | Pegar linhas entre dois padrões

Vamos utilizar o arquivo **padrao.txt** abaixo para realizar as operações:

<div class="content mb-10">[![Coletar linhas entre padrões com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/padrao_hu5856180c72bc9dbad9abe8c237201352_7420_232x137_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/padrao.png)</div>Caso você queira printar, todas as linhas entre “**padrao1**” e “**padrao2**”:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
awk '/padrao1/{flag=1;next}/padrao2/{flag=0}flag' padrao.txt

```

<div class="content mb-10"><div class="highlight"></div>[![Linhas entre padrões com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/sempadroes_hu13a8c08b9c48a80f5489a97d5ef44904_11583_525x78_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/sempadroes.png)</div>Caso queira que “**padrao1**” e “**padrao2**” também seja printado:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
awk '/padrao1/{a=1}/padrao2/{print;a=0}a' padrao.txt

```

<div class="content mb-10"><div class="highlight"></div>[![Conteúdo entre padrões com AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/incluindo-awk_hu7950d1ebe0ea81691bf7bd0517119b58_13761_469x111_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/incluindo-awk.png)</div>### 5.2 | Adicionar um prefixo nas linhas

Para adicionar um prefixo nas linhas pode-se utilizar a função **gensub()**, veja o exemplo abaixo, onde adicionamos a palavra “Prefixos” em todas as linhas que comecem com caracteres alfanuméricos:

<div class="content mb-10"><button class="copy-code-button" type="button">Copiar</button><div class="highlight"></div></div>```bash
awk -e ' { print gensub(/^[a-zA-Z0-9]*/, "Prefixos &",1) }' notas.txt

```

<div class="content mb-10"><div class="highlight"></div>[![gensub no AWK](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awkprefixos_hub99131691dd910f7ec991e08f4ae1217_17865_603x114_fit_q100_h2_lanczos_3.webp)](https://blog.ironlinux.com.br/images/blog-posts/uploads/2022/04/awkprefixos.png)</div>Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo [Telegram](https://t.me/ironlinux) , [Facebook](https://www.facebook.com/ironlinuxoficial) ou [Instagram](https://www.instagram.com/ironlinux_/) ! Veja mais posts no [IronLinux](https://blog.ironlinux.com.br/) !

##### Tags:

<div class="row items-start justify-between"><div class="lg:col-5 mb-10 flex items-center lg:mb-0">  
- [Awk](https://blog.ironlinux.com.br/tags/awk/)
- [Comandos linux](https://blog.ironlinux.com.br/tags/comandos-linux/)
- [Linux](https://blog.ironlinux.com.br/tags/linux/)
- [Manipulação de texto](https://blog.ironlinux.com.br/tags/manipula%c3%a7%c3%a3o-de-texto/)
- [Sed](https://blog.ironlinux.com.br/tags/sed/)

</div><div class="lg:col-4 flex items-center"><div class="share-icons">  
</div></div></div><div class="row items-start justify-between"><div class="lg:col-4 flex items-center"></div></div></article></div>## Posts relacionados

<div class="section pb-0" id="bkmrk-" style="text-align: justify;"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">[<picture><source media="(max-width: 575px)" srcset="/images/blog-posts/uploads/2019/10/error_hucc2e0509482998e4b2d13b1c822b4379_20362_545x0_resize_q100_h2_lanczos_2.webp"><source media="(max-width: 767px)" srcset="/images/blog-posts/uploads/2019/10/error_hucc2e0509482998e4b2d13b1c822b4379_20362_600x0_resize_q100_h2_lanczos_2.webp"><source media="(max-width: 991px)" srcset="/images/blog-posts/uploads/2019/10/error_hucc2e0509482998e4b2d13b1c822b4379_20362_700x0_resize_q100_h2_lanczos_2.webp"><source srcset="/images/blog-posts/uploads/2019/10/error_hucc2e0509482998e4b2d13b1c822b4379_20362_1110x0_resize_q100_h2_lanczos_2.webp">![Redirecionar a saída padrão e de erros](https://blog.ironlinux.com.br/images/blog-posts/uploads/2019/10/error_hucc2e0509482998e4b2d13b1c822b4379_20362_1110x0_resize_q100_h2_lanczos_2.webp)</source></source></source></source></picture>](https://blog.ironlinux.com.br/redirecionar-saida-padrao-e-de-erros/)</div></div></div></div>#### [Redirecionar a saída padrão e de erros](https://blog.ironlinux.com.br/redirecionar-saida-padrao-e-de-erros/)

<div class="section pb-0" id="bkmrk-vinicius-souza-%C2%A0linu" style="text-align: justify;"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">- [Vinicius Souza](https://blog.ironlinux.com.br/authors/vinicius-souza/)
- [Linux](https://blog.ironlinux.com.br/categories/linux/)

</div></div></div></div>Quando é executado um comando ou algum script no Linux é possível redirecionar a saída padrão e de erros para não ser printado em tela ou que seja direcionado à algum lugar especifico.

<div class="section pb-0" id="bkmrk-ler-post-completo" style="text-align: justify;"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">[Ler post completo](https://blog.ironlinux.com.br/redirecionar-saida-padrao-e-de-erros/)</div></div><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">[<picture><source media="(max-width: 575px)" srcset="/images/blog-posts/uploads/2020/12/COMANDO-SED-1_hud2e12d6c9cec0cf7fb6055af72465bd8_131220_545x0_resize_q100_h2_lanczos_2.webp"><source media="(max-width: 767px)" srcset="/images/blog-posts/uploads/2020/12/COMANDO-SED-1_hud2e12d6c9cec0cf7fb6055af72465bd8_131220_600x0_resize_q100_h2_lanczos_2.webp"><source media="(max-width: 991px)" srcset="/images/blog-posts/uploads/2020/12/COMANDO-SED-1_hud2e12d6c9cec0cf7fb6055af72465bd8_131220_700x0_resize_q100_h2_lanczos_2.webp"><source srcset="/images/blog-posts/uploads/2020/12/COMANDO-SED-1_hud2e12d6c9cec0cf7fb6055af72465bd8_131220_1110x0_resize_q100_h2_lanczos_2.webp">![O comando SED no Linux](https://blog.ironlinux.com.br/images/blog-posts/uploads/2020/12/COMANDO-SED-1_hud2e12d6c9cec0cf7fb6055af72465bd8_131220_1110x0_resize_q100_h2_lanczos_2.webp)</source></source></source></source></picture>](https://blog.ironlinux.com.br/o-comando-sed-no-linux/)</div></div></div></div>#### [O comando SED no Linux](https://blog.ironlinux.com.br/o-comando-sed-no-linux/)

<div class="section pb-0" id="bkmrk-vinicius-souza-%C2%A0linu-1" style="text-align: justify;"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">- [Vinicius Souza](https://blog.ironlinux.com.br/authors/vinicius-souza/)
- [Linux](https://blog.ironlinux.com.br/categories/linux/)

</div></div></div></div>O comando SED é uma ótima ferramenta de edição de arquivos ou de formatação de resultados de comandos, com ele você pode pesquisar, localizar e substituir, inserir ou excluir palavras, números e etc.

<div class="section pb-0" id="bkmrk-ler-post-completo-1" style="text-align: justify;"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">[Ler post completo](https://blog.ironlinux.com.br/o-comando-sed-no-linux/)</div></div><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">[<picture><source media="(max-width: 575px)" srcset="/images/blog-posts/uploads/2020/04/Stress-ng-1_hu20ef07f6d87399612b4205b98ee978d4_28688_545x0_resize_q100_h2_lanczos_2.webp"><source media="(max-width: 767px)" srcset="/images/blog-posts/uploads/2020/04/Stress-ng-1_hu20ef07f6d87399612b4205b98ee978d4_28688_600x0_resize_q100_h2_lanczos_2.webp"><source media="(max-width: 991px)" srcset="/images/blog-posts/uploads/2020/04/Stress-ng-1_hu20ef07f6d87399612b4205b98ee978d4_28688_700x0_resize_q100_h2_lanczos_2.webp"><source srcset="/images/blog-posts/uploads/2020/04/Stress-ng-1_hu20ef07f6d87399612b4205b98ee978d4_28688_1110x0_resize_q100_h2_lanczos_2.webp">![Estressando MEM, DISCO e CPU com Stress-ng [Debian9]](https://blog.ironlinux.com.br/images/blog-posts/uploads/2020/04/Stress-ng-1_hu20ef07f6d87399612b4205b98ee978d4_28688_1110x0_resize_q100_h2_lanczos_2.webp)</source></source></source></source></picture>](https://blog.ironlinux.com.br/estressando-mem-disco-e-cpu-com-stress-ng-debian9/)</div></div></div></div>#### [Estressando MEM, DISCO e CPU com Stress-ng \[Debian9\]](https://blog.ironlinux.com.br/estressando-mem-disco-e-cpu-com-stress-ng-debian9/)

<div class="section pb-0" id="bkmrk-vinicius-souza-%C2%A0linu-2" style="text-align: justify;"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body">- [Vinicius Souza](https://blog.ironlinux.com.br/authors/vinicius-souza/)
- [Linux](https://blog.ironlinux.com.br/categories/linux/)

</div></div></div></div>O STRESS-NG Com a ferramenta Stress-ng podemos literalmente realizar o Stress de alguns recursos do seu servidor, sendo eles: Cpu, memória e disco.

<div class="section pb-0" id="bkmrk-ler-post-completo-2"><div class="row"><div class="lg:col-4"><div class="bg-body dark:bg-darkmode-body" style="text-align: justify;">[Ler post completo](https://blog.ironlinux.com.br/estressando-mem-disco-e-cpu-com-stress-ng-debian9/)</div></div></div></div>