Fatiou, passou: filtrando CSVs de gigabytes no terminal


Turicas aka Álvaro Justen


Coda.BR 2018

10 de novembro de 2018 - São Paulo/SP

$ whoami

Turicas, prazer! =)

Sigam-me os bons:

{twitter,
github,
youtube,
slideshare,
instagram,
telegram}
/turicas

turicas@brasil.io

Brasil.IO

O Brasil em dados libertos

Logo Brasil.IO
## 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