Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 70 additions & 49 deletions 13-AWK/README.md
Original file line number Diff line number Diff line change
@@ -1,62 +1,84 @@
# AWK
# AWK

* Descrição
* AWK é uma linguagem de programação que permite a manipulação de textos levando em consideração uma sequência de padrões.
- Descrição

* Opções de comando
* -f: Especifica o nome do arquivo que possui os comandos que serão executados.
* -F: Define o que será o separador de campos (O espaço é o padrão).
* -h: Informa as opções (Ajuda).
* -v: Informa a versão.
- AWK é uma linguagem de programação que permite a manipulação de textos levando em consideração uma sequência de padrões.

* Formato do comando
* O comando awk é basicamente formado por: awk '/padrão/{ação}' "nomedoarquivo".
* Onde o padrão é uma expressão regular, é necessário que ao menos uma ação ou um padrão seja digitado, caso contrário o comando awk não executará nada.
- Opções de comando

- -f: Especifica o nome do arquivo que possui os comandos que serão executados.
- -F: Define o que será o separador de campos (O espaço é o padrão).
- -h: Informa as opções (Ajuda).
- -v: Informa a versão.

- Formato do comando

* Regras do AWK
* O AWK lê uma linha do arquivo por vez.
* Para cada linha lida o AWK realiza as ações que foram informadas.
* Caso não seja informado nenhum padrão o AWK não realizará nenhuma ação.
* Caso não seja informada nenhuma ação o AWK realizará a sua ação padrão (print)
* É possível realizar mais de uma ação separando cada uma delas por ponto e vírgula ";".
- O comando awk é basicamente formado por: awk '/padrão/{ação}' "nomedoarquivo".
- Onde o padrão é uma expressão regular, é necessário que ao menos uma ação ou um padrão seja digitado, caso contrário o comando awk não executará nada.

- Regras do AWK

* Variáveis internas
* O AWK, assim como o bash, possui suas variáveis internas, são elas:
* ARGC: Número de argumentos da linha de comando;
* ARGV: Vetor com os argumentos da linha de comandos;
* ENVIRON: Vetor com as variáveis de ambiente;
* ERRNO: Armazena mensagem de erro;
* FILENAME: Nome do arquivo de entrada que está sendo processado;
* FNR: Número de linhas já processadas em um determinado arquivo;
* FS: Separador de campos (Espaço vazio é o padrão);
* NF: Números de campos presentes na linha que está sendo processada (último campo);
* NR: Números de linhas já processadas.
* $0: A linha que está sendo processada atualmente
* $1,$2,$3,$...: Campos da linha que está sendo processada.
- O AWK lê uma linha do arquivo por vez.
- Para cada linha lida o AWK realiza as ações que foram informadas.
- Caso não seja informado nenhum padrão o AWK não realizará nenhuma ação.
- Caso não seja informada nenhuma ação o AWK realizará a sua ação padrão (print)
- É possível realizar mais de uma ação separando cada uma delas por ponto e vírgula ";".

- Variáveis internas
- O AWK, assim como o bash, possui suas variáveis internas, são elas:
- ARGC: Número de argumentos da linha de comando;
- ARGV: Vetor com os argumentos da linha de comandos;
- ENVIRON: Vetor com as variáveis de ambiente;
- ERRNO: Armazena mensagem de erro;
- FILENAME: Nome do arquivo de entrada que está sendo processado;
- FNR: Número de linhas já processadas em um determinado arquivo;
- FS: Separador de campos (Espaço vazio é o padrão);
- NF: Números de campos presentes na linha que está sendo processada (último campo);
- NR: Números de linhas já processadas.
- $0: A linha que está sendo processada atualmente
- $1,$2,$3,$...: Campos da linha que está sendo processada.

### Exemplo:
* Suponhamos que há um arquivo de texto chamado "entrada.txt" e nesse arquivo temos o seguinte conteúdo:

Nome Pontos
José 103
Andréia 50
Henrique 22
Júlia 150

* Caso seja solicitado que apareça na tela apenas o nome das pessoas do arquivo, o comando usado será:
* awk 'NR>1{print $1}' entrada.txt

* Onde "NR>1" ignora a primeira linha, que neste caso é o cabeçalho, e $1 é o primeiro campo da linha que tem "espaço vazio" como parâmetro de separação.

* Arquivo AWK
* Há também uma outra forma de realizar esse processamento que é criando um arquivo awk e inserindo nele os comandos necessários para realizar tal tarefa.
* O arquivo pode ser feito utilizando o "BEGIN" e o "END" que são comandos utilizados 'antes' de processar e 'depois' de processar o arquivo.

- Suponhamos que há um arquivo de texto chamado "entrada.txt" e nesse arquivo temos o seguinte conteúdo:

Nome Pontos
José 103
Andréia 50
Henrique 22
Júlia 150

- Caso seja solicitado que apareça na tela apenas o nome das pessoas do arquivo, o comando usado será:

- `awk 'NR>1{print $1}' entrada.txt`

- Onde "NR>1" ignora a primeira linha, que neste caso é o cabeçalho, e $1 é o primeiro campo da linha que tem "espaço vazio" como parâmetro de separação.

- Caso seja solicitado que apareça na tela apenas o nome das pessoas que começa com uma determinada letra, o comando usado será:

- `awk '$1 ~ /^J/ {print $0}' entrada.txt`

- Onde o awk ira imprimir o primeiro campo "$1" que casa com uma expressao regular "~" que começa com a letra J "/^J" imprimindo a linha inteira "{print $0}".

- Note que podemos "negar" a afirmação usando "!~" para imprimir tudo que NÃO começa com a letra J.

- `awk '$1 ~ /^J/ && NR>1 {print $0}' entrada.txt`

- Onde o awk ira imprimir o primeiro campo "$1" que casa com uma expressao regular "~" que começa com a letra J "/^J" E "&& é o and logico" "NR>1" ignora a primeira linha que é o cabeçalho imprimindo a linha interira "{print $0}".

- Caso seja necessário realizar operações matemáticas como por exemplo, computar a média dos pontos de todas as pessoas do arquivo, o comando usado será:

- `awk 'NR > 1 {sum += $2; count++} END {print sum / count}' entrada.txt`

- Onde o awk ignora a primeira linha que é o cabeçalho "NR > 1" já que essa linha iria interferir no calculo da média, cria duas variaveis "sum" e "count" (pode ser qualquer nome) e itera sobre elas. No fim "END" do processamento do arquivo, o awk imprime "sum / count".

- Arquivo AWK
- Há também uma outra forma de realizar esse processamento que é criando um arquivo awk e inserindo nele os comandos necessários para realizar tal tarefa.
- O arquivo pode ser feito utilizando o "BEGIN" e o "END" que são comandos utilizados 'antes' de processar e 'depois' de processar o arquivo.

### Exemplo:
``` awk

```awk
BEGIN { "condições e comandos a serem executados antes de iniciar a leitura do arquivo" }
{
"condições e comandos a serem executados em cada linha do arquivo"
Expand All @@ -66,5 +88,4 @@ END { "comandos a serem executados após a leitura do arquivo" }

# Videoaula(s)

* AWK: https://youtu.be/mTlx7Cz7y2I?list=PLlfnoloSCPI2yAhYzUXE6V8-8DNC5nk0M

- AWK: https://youtu.be/mTlx7Cz7y2I?list=PLlfnoloSCPI2yAhYzUXE6V8-8DNC5nk0M
78 changes: 78 additions & 0 deletions 15-Vim/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# VIM

- O Vim é um editor de texto avançado, altamente configurável e poderoso, muito usado no desenvolvimento e edição de scripts, código-fonte, e arquivos de configuração.

- Vim funciona em modo texto, com comandos e modos diferentes para editar, navegar, copiar, colar e muito mais.

---

## Modos principais do Vim:

- **Modo Normal**: modo padrão para navegar e executar comandos.
- **Modo Inserção**: para digitar texto (ativa com `i`).
- **Modo Visual**: para selecionar blocos de texto (ativa com `v`).
- **Modo Comando**: para executar comandos do Vim (ativa com `:`).

---

## Comandos básicos no modo Normal

| Comando | Descrição |
| -------- | --------------------------- |
| `i` | Entrar no modo inserção |
| `Esc` | Voltar para o modo normal |
| `:w` | Salvar arquivo |
| `:q` | Sair do Vim |
| `:wq` | Salvar e sair |
| `dd` | Deletar a linha atual |
| `yy` | Copiar a linha atual |
| `p` | Colar após o cursor |
| `/texto` | Procurar "texto" no arquivo |
| `u` | Desfazer última alteração |
| `Ctrl+r` | Refazer alteração desfeita |

**NOTA :** Para um apredizado mais dinamico sugiro seguir o tutorial do próprio Vim, digitando no shell `vimtutor`

---

## Configurações úteis para melhorar o Vim (sem plugins)

Você pode criar ou editar o arquivo `~/.vimrc` e adicionar essas linhas para melhorar sua experiência:

```vim
" Ativa a numeração das linhas para facilitar a navegação
set number
set relativenumber

" Destaca a linha onde o cursor está para melhor localização visual
set cursorline

" Destaca as ocorrências da última busca automaticamente
set hlsearch

" Faz a busca ser case insensitive, a menos que use maiúsculas na busca
set ignorecase
set smartcase

" Mostra correspondência de parênteses quando você posiciona o cursor próximo
set showmatch

" Usa indentação automática baseada no arquivo
set autoindent
set smartindent
set tabstop=4 " Número de espaços que um TAB ocupa
set shiftwidth=4 " Número de espaços usados para indentação
set expandtab " Usa espaços em vez de tabs

" Permite rolagem suave com o cursor no final do arquivo
set scrolloff=5

" Permite que o Vim use o clipboard do sistema para copiar e colar (se suportado). Para saber sua versão do vim tem suporte, dentro do vim, entre no modo normal e digite :echo has('clipboard') se a saída for 1, entao tem suporte, se for 0, nao tem suporte.
set clipboard=unnamedplus

" Permite remapear a combinaçao de tecla usada pelo vim para copiar, para a boa e velha combinaçao que todo mundo conhece Ctrl + C
vnoremap <C-c> "+y

```

---