Manipulando dados pela CLI
Embora pareça assustadora para iniciantes, a Interface de Linha de Comando (CLI) é uma forma poderosa de lidar diretamente com a máquina e os dados a serem analisados. É uma das formas usuais de trabalho em Bioinformática e em ciências de dados. É também pela CLI que acessamos servidores computacionais remotos para a execução de tarefas mais complexas.
Observações:
- Este tutorial foi adaptado a partir do Livro The Biostars Handbook de Istvan Albert (2022). O conteúdo original foi traduzido e modificado em parte sua estrutura apenas para fins didáticos. A reprodução dele para qualquer outro fim não é permitida e nem consentida.
- Para realização deste tutorial, faça antes o anterior (101), de Introdução a linha de comando - UNIX.
Continuando com novos comandos úteis no terminal
- Vamos trabalhar com um arquivo fasta de sequências de nucleotídeos. Este arquivo está alocado em um outro servidor, iremos fazer a cópia do arquivo remotamente, utilizando o comando
wget
. Coloque o arquivo em um diretório de trabalho~/aulas
:
cd ~/aulas
- Se ainda não tiver este diretório/pasta criado crie-o com o comando abaixo:
mkdir aulas
- Agora executaremos o
wget
:
wget 'https://drive.google.com/uc?export=download&id=15OCaUzNHqp2hD6sfAnQPxebBclr6tQTS' -O teste.fasta
- Agora vamos conhecer alguns outros comandos úteis, utilizando pipes de diferentes comandos. Vamos ver as últimas 10 linhas de um arquivo, fazendo um pipe de dois comandos, o
tail
e ohead
.
tail -n 20 teste.fasta | head
O primeiro, com a opção
-n 20
dá as últimas 20 linhas do arquivo, e fazendo o 'pipe' com ohead
irá mostrar as primeiras 10 linhas das últimas 20.
- Quantas sequências este arquivo multifasta possui?
grep -c '>' teste.fasta
- Vamos extrair apenas os cabeçalhos das sequências fasta?
grep '>' teste.fasta
- Mostrar as linhas do arquivo que começam com um códon de iniciação ATG:
grep "^ATG" teste.fasta
Neste caso, o caractere ^
procura padrões no início de uma linha.
- Agora vamos contar quantas linhas em um arquivo contêm as trincas 'CAT' ou 'GAT':
grep -c '[CG]AT' teste.fasta
A opção
-c
do comandogrep
conta o número de linhas. A descrição '[CG]' denota a expressão regular para procura.
Vamos criar outros arquivos, utilizando o comando echo
e o direcionador >
para trabalhar com os próximos comandos.
- Criando um arquivo com apenas letras minúsculas:
echo 'este arquivo possui apenas letras minúsculas' > arquivoexemplo.txt
- Agora vamos transformar as letras minúsculas deste arquivo em maiúsculas, utilizando o comando
tr
:
cat arquivoexemplo.txt | tr 'a-z' 'A-Z'
- Vamos criar um arquivo para utilizar o próximo comando:
echo 'Chr1 Chr2 Chr1 Chr3 Chr1 Chr4 Chr1 Chr5' > arquivoexemplo1.txt
- Agora vamos mudar todas as ocorrências de 'Chr1' para 'Chromosome 1' e escrever o output para um novo arquivo, utilizando o comando
sed
:
cat arquivoexemplo1.txt | sed 's/Chr1/Chromosome 1/g' > arquivoexemplo2.txt
- Veja como ficou o arquivo:
more arquivoexemplo2.txt
Vamos agora baixar o arquivo min.fasta
utilizando o wget
. Este arquivo de uma sequências de nucleotídeos está todo em letras minúsculas. Vamos transformar em maiúsculas?
- Primeiro baixe o arquivo
min.fasta
executando o comando abaixo:
wget 'https://drive.google.com/uc?export=download&id=1VPtm7uJGXiMy-wLX7Wou5_v-Om3H4Zs9' -O min.fasta
- Agora, verifique como está o arquivo com o comando
more
:
more min.fasta
- Agora utilize a combinação dos comandos
cat
etr
:
cat min.fasta | tr 'a-z' 'A-Z'
- Como você não especificou nenhum arquivo, a saída do comando foi para a tela. Agora repita o comando desta forma:
cat min.fasta | tr 'a-z' 'A-Z' > MAI.fasta
Obtendo dados de um genoma online
Vamos agora baixar uma tabela de features cromossomal (informações e características) do banco de dados SGD (Saccharomyces Genome Database). Estes arquivos podem ser também acessados pelo navegador AQUI.
O comando curl não funciona no Cocalc. Baixe o arquivo pelo link acima e adicione no CoCalc em File > New.
Usaremos agora um outro comando para baixar arquivos remotos, o comando curl
:
curl http://sgd-archive.yeastgenome.org/curation/chromosomal_feature/SGD_features.tab > sc.tab
Observe que no comando
curl
temos de especificar um arquivo local, utilizando o redirecionamento>
. Se ele não for utilizado, o padrão é a saída para a tela.
Vamos também baixar o arquivo README que descreve como o arquivo de features acima está organizado:
curl http://sgd-archive.yeastgenome.org/curation/chromosomal_feature/SGD_features.README > README
Verifique o que descreve cada coluna do arquivo 'sc.tab', vendo o arquivo README:
more README
O arquivo está em inglês! Habitue-se. Praticamente tudo em bioinformática é em língua inglesa. Portanto, em bom inglês: Dude, get over it and move on! Get a dictionary or use Google Translator or (even better) learn english!
Obtendo informações sobre o arquivo
O arquivo sc.tab é um arquivo com informações de regiões cromossômicas da levedura Saccharomyces cerevisae onde as informações referentes as colunas estão separadas por 'tab'. É um arquivo com inúmeras colunas e linhas, extremamente grande. Este mesmo arquivo pode ser importado para uma planilha de dados (estilo Excel®). Mesmo assim, sua visualização é complicada devido ao seu tamanho, além de nem sempre ser possível abrir um gerenciador de planilhas em um terminal. Aqui usaremos uma série de comandos simples do UNIX (alguns já vistos no tutorial anterior, façam por favor!) para obtermos e extrairmos informações deste arquivo, sem ter de abri-lo e verificar linha a linha.
Para verificar quantas linhas este arquivo possui:
wc -l sc.tab
Para verificar como o arquivo inicia?
head sc.tab
Para verificar quais linhas possuem o padrão desejado, por exemplo o padrão 'YAL060W'?
grep YAL060W sc.tab | head
Para colorir o padrão procurado e facilitar a visualização na tela do terminal:
grep YAL060W sc.tab --color=always | head
Podemos também extrair as linhas que contêm o padrão para um novo arquivo:
grep YAL060W sc.tab > match.tab
O comando abaixo faz exatamente a mesma coisa do anterior. É mais longo e roda um programa a mais (cat
), mas é mais claro em relação ao anterior, pois especifica melhor o arquivo a ser aberto:
cat sc.tab | grep YAL060W > match1.tab
Para verificar quantas linhas no arquivo possuem a palavra 'gene':
cat sc.tab | grep gene | wc -l
O comando acima acha a palavra gene em qualquer lugar da linha. Este arquivo usa a denominação feature type (Coluna 2) 'ORF' para genes que codificam proteínas. Construindo os comandos em pequenos passos, extrairemos as informações que contém ORF, com o o comando cut
:
cat sc.tab | head
cat sc.tab | cut -f 2 | head
cat sc.tab | cut -f 2 | grep ORF | head
Note que a opção
-f 2
especifica que queremos a coluna 2 deste arquivo.
Podemos selecionar múltiplas colunas de interesse a partir da saída (output), também com o comando cut
:
cat sc.tab | cut -f 2,3,4 | grep ORF | head
Podemos também obter a informação de quantas colunas possuem a palavra ORF na segunda coluna:
cat sc.tab | cut -f 2,3,4 | grep ORF | wc -l
E as linhas que NÃO POSSUEM certo padrão? Também podemos obter, utilizando a opção -v
do comando grep
, que inverte a sua ação, mostrando as linhas que não possuem o padrão. Neste caso, queremos extrair as linhas que não possuem o padrão Dubious:
cat sc.tab | grep -v Dubious | cut -f 2,5,9 | wc -l
Quantas features existem nestes dados:
cat sc.tab | cut -f 2 > features.tab
Ao classificar, colocamos entradas idênticas consecutivas próximas uma das outras:
cat features.tab | sort | head
Para encontrar palavras únicas, o comando uniq
resume palavras idênticas consecutivas em apenas uma:
cat features.tab | sort | uniq | head
Utilizando a opção -c
no comando uniq
não apenas resumirá entradas consecutivas, como irá também mostrar a sua contagem:
cat features.tab | sort | uniq -c | head
Não se preocupe se você não sabe estes comandos e suas respectivas opções de cabeça. Isto vem com o tempo e com o uso. Em um momento ou outro, bioinformatas experientes precisam consultar o manual (comando man
) ou relembrar o que estes comandos fazem. Vale sempre deixar nos favoritos um site que contenha uma lista com os principais comandos UNIX. Buscas no Google ou consultas ao Chat-GPT também ajudam bastante nessas horas que precisamos relembrar de comandos.