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 |
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
.
Recorda que amb Crtl + C els programes s’acaben immediatament i es torna a mostrar el prompt (en català, la línia d’ordres).
$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 |
Un exemple amb tar
:
$ tar -cvf backup.tar /home/student
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