Fatiou, passou: filtrando CSVs de gigabytes no terminal
Turicas aka Álvaro Justen
10 de novembro de 2018 - São Paulo/SP
$ whoami
Turicas, prazer! =)
Sigam-me os bons:
O Brasil em dados libertos
## Agenda
- Introdução
- Navegação/manipulação de arquivos e diretórios
- Acesso e filtragem de arquivos
- Combinando comandos
- Exemplos avançados
## Antes de mais nada...
- Baixar `contracheque.csv` em [bit.ly/contracheque-magistrados](http://bit.ly/contracheque-magistrados)
## 1.1 Introdução: Terminal
- Terminal
- ou "linha de comando"
- ou "modo texto"
- ou "tela preta"
- ou "shell"
- É um **interpretador de comandos**
- Existem diversos:
- DOS
- **Bash**
- Zsh
- PowerShell
- ...
- No Windows: [cygwin](https://www.cygwin.com/) ou [gitbash](https://gitforwindows.org/)
## 1.2 Introdução: Comandos e opções
- Comandos ("verbos")
- Exemplo: `ls`
- Parâmetros
- Exemplo: `echo "olá, mundo!"`
- Opções
- Exemplo: `ls -l`
- Variáveis: armazenam valores
- Exemplo:
```
mensagem="olá, mundo!"
echo $mensagem
```
## 2.1 Navegação/manipulação de arquivos e diretórios
- `ls`: list files
- Exemplos: `ls`, `ls /tmp`
- `mkdir`: make directory
- Exemplo: `mkdir nova-pasta`
- Caminhos relativos versus absolutos
- `rmdir`: remove directory (apenas vazios)
- Exemplo: `rmdir nova-pasta`
- `cd`: change directory
- Exemplo: `cd /tmp`
- `touch`: cria arquivo em branco
## 2.2 Pedindo ajuda
- `-h`, `--help`
- Exemplo: `ls --help`
- `man comando`
- Exemplo: `man ls`
- Use `/palavra` para buscar
- Use `q` para sair
## 3.1 Acesso e filtragem de arquivos
- `wc`
- Exemplo: `wc -l contracheque.csv`
- `cat`
- Exemplo: `cat contracheque.csv`
- `grep`
- Exemplo: `grep -i "Sergio Fernando Moro" contracheque.csv`
- `cut`
- Exemplo: `cut -d',' -f2,15 contracheque.csv`
- `head`
- Exemplo: `head -1 contracheque.csv`
## 3.2. Redirecionar saída
- `comando > arquivo.txt`
- Exemplo: `head -1 contracheque.csv > cabecalho.csv`
- `comando >> arquivo.txt`
- Exemplo: `grep -i "Sergio Fernando Moro" contracheque.csv >> cabecalho.csv`
## 3.3. Uso de recursos
- Filosofia UNIX: um comando faz somente uma tarefa - e o faz bem
- Os comandos trabalham de forma preguiçosa (`lazy`)
- Rodar `grep` num arquivo de 5GB não exige essa quantidade de
memória (diferente do que abrir um arquivo desses no Excel)
## 3.3 Criando scripts
- Crie um arquivo e coloque um comando por linha
- O comando `history` pode te ajudar, listando os comandos que você
digitou recentemente
- Execute o script com: `bash nome-do-arquivo.sh`
## 3.3.2 Script de Exemplo
```
echo "Número de linhas do arquivo inicial:"
wc -l contracheque.csv
echo "Criando arquivo com Moro e Bruno..."
head -1 contracheque.csv > juizes.csv
grep --color=no -i "SERGIO FERNANDO MORO" contracheque.csv >> juizes.csv
grep --color=no -i "BRUNO SOUZA SAVINO" contracheque.csv >> juizes.csv
echo "Arquivo criado. Total de linhas:"
wc -l juizes.csv
```
## 3.4 Navegando no histórico de comandos
- Seta para cima: mostra comandos anteriores
- Facilita muito executar comandos parecidos, alterando apenas
alguns parâmetros
- Ctrl-r: busca no histórico de comandos
## 4.1. Combinando comandos
- Pipe (barra vertical): `|`
- Redireciona saída de um comando (standard output) para a entrada
(standard input) de outro
- Pode ser utilizado quantas vezes quiser
- Pode ser utilizado em conjunto com `>` e `>>`
## 5.1. Exemplos avançados
- Comandos que nem sempre estão instalados por padrão
- Cada um requer uma forma diferente de instalação.
- Em sistemas Debian e Ubuntu: `apt install nome-do-programa`
- `wget`: baixar arquivos
- Exemplo: `wget http://agencia.tse.jus.br/estatistica/sead/odsele/consulta_cand/consulta_cand_2018.zip`
- `rows`: converter dados tabulares em diversos formatos
- Exemplo:
```
url=http://balneabilidade.inema.ba.gov.br/index.php/relatoriodebalneabilidade/geraBoletim?idcampanha=36381
rows convert $url balneabilidade.csv
```
- `convert` (imagemagick): recorta, edita e converte imagens
- `ffmpeg`: converte vídeos