1. Introducció als entorns de treball UNIX

1.9. Accedir al contingut dels fitxers

1.9.1. Introducció

Un filtre, en el context de la línia d’ordres de Gnu/Linux, és un programa que accepta dades textuals i les transforma d’una manera particular. Els filtres són una forma de prendre dades en brut, ja hagin estat produïdes per un altre programa o emmagatzemats en un arxiu, i manipular-les perquè es mostrin d’una manera més adequada per trobar el que estem buscant. Aquests filtres sovint tenen diverses opcions de línia d’ordres que modificaran el seu comportament, per la qual cosa sempre és bo consultar la pàgina del manual d’un filtre per veure quin està disponible.

En els exemples que es mostren a continuació, proporcionarem entrada en aquestes ordres mitjançant un arxiu, però també veurem que podem proporcionar entrada a través d’altres mitjans que agreguen molta més potència (taula 6). A més, recordeu que l’arxiu s’especifica com un path i, per tant, podeu fer servir paths absoluts i relatius, i també comodins. D’altra banda, aquestes eines que estem veient només serveixen per treballar amb fitxers de text, no binaris.

Taula 6. Ordres per accedir al fitxer.

Ordre Descripció
cat Imprimeix un fitxer al terminal
more Mostra el resultat de l’execució d’una ordre al terminal d’una pàgina alhora
head És una ordre que imprimeix les primeres deu línies de la seva entrada, però podem modificar això amb un argument de línia d’ordre
tail És una ordre que imprimeix les últimes deu línies de la seva entrada, però podem modificar això amb un argument de línia d’ordre
less És un visor de fitxers de text. Amb aquest programa no podrem editar el fitxer, però sí navegar pel seu contingut
nl number line significa ‘numerar línies’, i això és exactament el que fa l’ordre
wc word count significa ‘comptar paraules’ i fa concretament això (i també compta caràcters i línies). De forma predeterminada, donarà un recompte de les tres possibilitats, però,  usant opcions de línia d’ordre, podem limitar-lo al que necessitem
diff Compara línia a línia dos fitxers de text
paste Uneix fitxers tabulars línia per línia
od octal dump converteix l’entrada en múltiples formats, amb format octal per defecte, i ajuda a comprendre les dades complexes que no són llegibles per als humans
sed stream editor Editor de flux. Us permet fer una recerca i reemplaçament, entre altres accions, en les vostres dades

Font: elaboració pròpia.

En el camp de la bioinformàtica els arxius són molt grans; fins i tot els editors en línia poden generar problemes per obrir-los. Existeixen altres formes d’accedir als continguts del fitxer. Un d’ells seria imprimir el fitxer al terminal utilitzant l’ordre cat.

$cat hg38_RefSeq.txt

cat és, a més, capaç de concatenar textos un darrere l’altre en l’ordre en què els passem, i de mostrar-los en pantalla..

$ cat file1 file2 file3

O es pot generar un nou fitxer.

$ cat seq1 seq2 >> set1-2.txt

Algunes opcions interessants de cat són:

  • -A: mostra també els caràcters de control, bàsicament els tabuladors (com ^I) i els retorns de carro ($).
  • -n: numera totes les línies.

Per obtenir una visió general del contingut de l’arxiu sense ocupar tot el terminal, es poden imprimir només les primeres línies usant l’ordre head:

$ head -3 hg38_RefSeq.txt
#bin name chrom strand    txStart    txEnd cdsStart   cdsEnd    exonCount exonStarts exonEnds   score name2     cdsStartStat    cdsEndStat exonFrames

0    NM_001276352.2  chr1 -    67092164   67134970   67093579 67127240    9      67092164,67096251,67103237,67111576,67115351,67125751,67127165,67131141,67134929,     67093604,67096321,67103382,67111644,67115464,67125909,67127257,67131227,67134970,    

0    C1orf141   cmpl cmpl 2,1,0,1,2,0,0,-1,-1, 0     NM_001276351.2  chr1 -    67092164   67134970     67093004   67127240   8    67092164,67095234,67096251,67115351,67125751,67127165,67131141,67134929,     67093604,67095421,67096321,67115464,67125909,67127257,67131227,67134970,   0    C1orf141   cmpl cmpl     0,2,1,2,0,0,-1,-1,

Hi ha l’ordre tail, i permet imprimir el final dels arxius.

$ tail -2 hg38_RefSeq.txt

Un altre comportament de tail que resulta útil és que pot mostrar totes les línies excepte les k primeres línies. Per això cal fer servir l’opció -n i el nombre de línies que volem ometre precedit per un +. Si es volen ometre les primeres vint-i-dues línies, podeu escriure:

$ tail -n +22 hg38_RefSeq.txt

Quan es necessita examinar un arxiu de text per familiaritzar-se amb el seu contingut, és comú obrir-lo i navegar-hi. Tanmateix, si l’arxiu és molt gran, hi poden haver problemes quan intenteu obrir-lo amb un editor de text.

En aquests casos, una eina útil és less, un visor d’arxius de text que pot operar arxius immensos sense problemes. Tot i que less no permet l’edició de l’arxiu, sí que ens permet navegar pel seu contingut de manera interactiva. Quan executeu less, el programa s’obrirà en el terminal i farà que el prompt desaparegui temporalment. Podrem sortir del programa en qualsevol moment pressionant la tecla q.

$ less hg38_RefSeq.txt

Dins de less disposem de diverses ordres per moure’ns pel fitxer:

  • Barra d’espai: pàgina següent.
  • b: pàgina anterior.
  • 100g: va a la línia 100 (o a la que li indiquem).
  • -S: talla o no talla les línies llargues.
  • /paraula: busca la cadena de text que li indiquem (accepta expressions regulars).
  • n: va a la següent paraula que coincideix amb la recerca.
  • N: va a la paraula anterior que coincideix amb la recerca.
  • q: surt del fitxer.
  • h: ajuda.

L’ordre wc significa ‘comptatge de paraules’, i això és el que fa (així com comptar caràcters i línies). Per defecte, ens donarà un recompte de totes tres coses, però fent servir opcions de línia d’ordre, es pot limitar allò que es busca. De vegades només volem un d’aquests valors. Per exemple, «-l» ens donarà només les línies, «-w» ens donarà les paraules i «-m» ens donarà els caràcters.

$ wc hg38_RefSeq.txt
172767  2764272 56256545 hg38_RefSeq.txt
$ wc -l hg38_RefSeq.txt
172767 hg38_RefSeq.txt

La segona ordre imprimeix per pantalla només un recompte de línies, però la primera ordre ens informa del nombre de línies, paraules i caràcters que té el fitxer.

L’ordre diff permet dur a terme la comparació línia a línia de dos fitxers de text. Òbviament, hi ha formes més sofisticades de comparar arxius. Tanmateix, aquesta funció és extremadament útil per confirmar quan dos fitxers no són idèntics (una de les operacions més comunes en bioinformàtica).

$ diff file1.txt file2.txt

Finalment, es comenta la comanda paste. Suposem que tenim dos fitxers, un amb dades sobre la progressió de la malaltia d’una sèrie de malalts i un altre amb el seu genotipat:

$ cat pacients.txt
id_pacient,nivell_glucosa

1,190

2,250

3,220

4,260

5,160

$ cat genotipat.txt
id_pacient,SNP_a,SNP_b
1,AA,CC
2,AC,GG
3,AA,CG
4,AT,GG
5,AA,CC

Es poden fusionar els dos arxius usant l’ordre paste línia a línia:

$ paste -d',' pacients.txt genotipat.txt
id_pacient,nivell_colesterol,id_pacient,SNP_a,SNP_b

1,190,1,AA,CC

2,250,2,AC,GG

3,220,3,AA,CG

4,260,4,AT,GG

5,160,5,AA,CC

La quantitat d’informació emmagatzemada en qualsevol entorn bioinformàtic és considerable, i sovint ocupa diversos terabytes. Per exemple, la seqüència del genoma humà està composta per al voltant de tres mil milions de nucleòtids, cosa que es tradueix en aproximadament tres gigabytes. Això implica que sovint cal comprimir directoris sencers. La instrucció tar pot crear un paquet únic a partir del directori, que posteriorment pot ser comprimit amb gzip. La taula 7 descriu les ordres per comprimir/descomprimir més habituals:

Taula 7. Ordres per accedir als fitxers.

Ordre Descripció
tar Empaquetar múltiples arxius i directoris
gzip Comprimir i descomprimir arxius
zmore Descomprimir i visualitzar un arxiu
zcat Descomprimir i bolcar un arxiu

Font: elaboració pròpia.

En l’exemple anterior de tar, les opcions indiquen que es crea (c) un arxiu (f) anomenat backup.tar que inclou tots els continguts del directori /home/student i els seus subdirectoris, i que es mostrin missatges detallats mentre es crea la còpia de seguretat (v). Atès que backup.tar és un argument de l’opció f, backup.tar ha de seguir immediatament a l’opció. Altres opcions són:

$ tar -xvf backup.tar

# La nova opció (x) indica que es desempaqueta el fitxer backup.

$ tar -czvf backup.tar.gz /home/student

# L’opció (z) indica que després que es creï el fitxer es comprimeixi.

$ tar -xzvf backup.tar.gz

Aquesta combinació d’opcions indica que el fitxer es descomprimeix i es desempaqueta.

Les ordres more i cat posseeixen una versió especial que integra l’ordre gzip com un filtre addicional. Com a resultat, podem visualitzar directament al terminal un fitxer comprimit:

$ gzip NANOGgene.fa
$ zmore NANOGgene.fa.gz | head -5
>hg19_refGene_NM_024865 range=chr12:7941992-7948657
TTCATTATAAATCTAGAGACTCCAGGATTTTAACGTTCTGCTGGACTGAG
CTGGTTGCCTCATGTTATTATGCAGGCAACTCACTTTATCCCAATTTCTT
GATACTTTTCCTTCTGGAGGTCCTATTTCTCTAACATCTTCCAGAAAAGT
CTTAAAGCTGCCTTAACCTTTTTTCCAGTCCACCTCTTAAATTTTTTCCT
$ zcat NANOGgene.fa.gz | tail -3
GTTGGTTTAAGTTCAAATGAATGAAACAACTATTTTTCCTTTAGTTGATT
TTACCCTGATTTCACCGAGTGTTTCAATGAGTAAATATACAGCTTAAACA
TAA
$ gzip -d NANOGgene.fa.gz