Una instalación estándar del sistema operativo Linux cuenta con un amplio numero de herramientas que nos pueden facilitar muchas tareas como:
- visualisar un fichero
- buscar un patrón en un fichero de texto
- procesar un fichero tabular (la información se encuentra en diferentes columnas)
- sustituir ciertas palabras por otras
- buscar ficheros que cumplen ciertas características
- …
Estas herramientas son especialmente importantes cuando trabajamos con ficheros muy grandes – demasiado grandes para abrirlos en un editor de texto (o hoja de cálculo).
Además, la interfaz entre el usuario y el SO (la shell) cuenta con su propio leguaje de programación que nos puede facilitar muchas tareas.
Procesar un fichero grande
Tenemos el siguiente fichero: /opt/datos/sequences.csv que contiene las anotaciones de todos los genomas secuenciados del virus SARS-Cov-2.
- Visualizar el contenido
less /opt/datos/sequences.csv more /opt/datos/sequences.csv
- Ver el tamaño de los ficheros
cd /opt/datos du -h *
- Contar el número de lineas
wc -l /opt/datos/sequences.csv
- Buscar lineas que contienen palabras claves
grep –help
grep ‘Spain’ /opt/datos/sequences.csv
- ¿Cuantas lineas existen que contienen ‘Spain’?
Solución: Unir dos comandos, grep y wc usando Pipes
grep 'Spain' /opt/datos/sequences.csv | wc -l
La herramienta wc acepta entrada por STDIN que proporciona grep.
- Redirigir la salida a un fichero de texto
grep 'Spain' /opt/datos/sequences.csv > /home/usuario/sars_cov_spain.txt
- Trabajar con ficheros comprimidos
gunzip -c /opt/datos/sequences_comp.csv.gz | grep 'Spain' | wc -l
gunzip -c descomprime un fichero ‘sobre la marcha’ y escribe el resultado por STDOUT (la pantalla). ¡No descomprime el fichero generando uno nuevo!
Extraer diferentes columnas de un fichero
cut --help
cut -f 1,2 -d , /opt/datos/sequences.csv
con -f podemos indicar las columnas y con -d tenemos que especificar el carácter usado para separar las columnas (suele ser o el tabulador o la coma)
Problema: hay columnas que contienen comas internas (por ejemplo la columna que lista los autores separados por comas). Estas columnas están ‘encomilladas’ pero la herramienta cut ignora esta información.
Solución: Preguntar a ChatGPT
csvtool col 1,2,19,20,21,22,23 <(gunzip -c sequences_comp.csv.gz)
Preguntas:
- ¿Cuantas entradas (genomas secuenciados) hay por pais?
- Generar un fichero con el conteo por pais ordenado.
- ¿Cuantas entradas hay por estado en USA?
- ¿Cuantas entradas hay por año?
Ejercicios:
Tenemos el fichero /opt/datos/consensus.txt
Reportar:
- Tamaño y número de lineas del fichero
- Número de microRNAs diferentes (primera columna)
- Número de genes diferentes (entradas que empiezan con ENSG en la segunda columna)
- Extraer todas las lineas de los microRNAs
- iri-miR-34-5p
- iri-miR-2b-3p
- iri-miR-bantam-5p
- iri-miR-10a-5p
- iri-miR-279a-5p
- ¿Cuantas líneas hay con un valor >= 3 en la tercera columna?