1.13. El llenguatge de processament d’arxius GAWK
1.13.2. Conceptes fonamentals
L’ordre gawk
és una eina capaç d’executar un bloc de codi sobre atributs individuals de cada registre emmagatzemat en les línies d’un arxiu de text. En processar les dades, és possible generar una nova línia de resultats, que es pot mostrar per pantalla o guardar en un nou arxiu de text.
L’ordre gawk
recorre el contingut de l’arxiu de text línia per línia, separant automàticament els diferents components d’aquestes. L’usuari té accés a variables predefinides que proporcionen informació selectiva (vegeu la taula 11) i pot accedir a cada columna d’una línia a través de la seva posició.
Taula 11. Variables especials d’«awk».
Variable | Descripció |
$0 |
Conté el contingut del registre d’entrada |
$1 |
Primer camp |
$2 |
Segon camp, i així successivament |
NF |
Number of fields. Nombre de camps (nombre de columnes) |
FS |
Separador de camp d’entrada |
OFS |
Separador de camp de sortida |
NR |
Number of records. Nombre de registres (nombre de línies) |
RS |
Separador de registre d’entrada |
ORS |
Separador de registre de sortida |
Filename |
Nom de l’arxiu d’entrada actualment en processament. |
Important: per defecte, el separador de camps és l’espai en blanc, i el separador de registres és el salt de línia.
En general, a l’intèrpret d’ordres gawk
se li subministren dos tipus de dades:
- un fitxer d’ordres o programa,
- un o més arxius d’entrada.
Un fitxer d’ordres (que pot ser un fitxer com a tal, o pot presentar-se en invocar gawk
des de la línia d’ordres) conté una sèrie de sentències que li indiquen a gawk
com processar el fitxer d’entrada. És a dir, conté el programa escrit en sintaxi GAWK.
$ gawk 'programa_GAWK' arxiu1 arxiu2 …
$ gawk -f 'arxiu_amb_codi_GAWK' arxiu1 arxiu2
A continuació, en tenim diversos exemples. Primer es genera un arxiu in situ amb seqüències en format FASTA i amb línies en blanc entre elles.
$ echo -e ">seq01\nACCTAT\n\n>seq02\nCACCGA\n\n>seq03\nAAAACAGAG\n\n" > seqüencia.txt
# Visualitzem el fitxer comptant les línies amb l’opció -n
$ cat -n seqüencia.txt
1 >seq01 2 ACCTAT 3 4 >seq02 5 CACCGA 6 7 >seq03 8 AAAACAGAG 9 10
# S’utilitza gawk
per imprimir només les línies que continguin almenys un camp no buit
$ gawk 'NF > 0' seqüencia.txt | nl
1 >seq01 2 ACCTAT 3 >seq02 4 CACCGA 5 >seq03 6 AAAACAGAG
# Imprimeix les primeres 7 línies
$ gawk 'NR <= 7' seqüencia.txt | cat -n
1 >seq01 2 ACCTAT 3 4 >seq02 5 CACCGA 6 7 >seq03
# Imprimeix les dues primeres línies i a partir de la sisena; a més, elimina els registres buits. En aquest cas l’ús dels parèntesis aconsegueix que es compleixin les dues condicions
$ gawk 'NF > 0 && (NR <= 2 || NR >= 6)' seqüencia.txt
>seq01 ACCTAT >seq03 AAAACAGAG
En el camp de la bioinformàtica, el fitxer d’entrada està normalment estructurat amb un format taula, per defecte amb camps separats per espais o tabuladors (taules). Es mostren exemples amb l’ordre gawk
de les possibilitats d’acció d’aquesta ordre.
Còpia en el teu terminal el fitxer mostrat a continuació i anomena’l ensamble.txt
#assembly_accession organism_name seq_rel_date asm_name submitter GCA_000004195.4 Drosophila melanogaster 2021-07-01 dm6 NCBI GCA_011586765.1 Arabidopsis thaliana 2022-04-11 Araport11 NCBI GCA_009859395.1 Mus musculus 2022-02-08 GRCm39 NCBI GCA_004115215.2 Caenorhabditis elegans 2022-03-16 WBcel235 NCBI GCA_016590495.1 Rattus norvegicus 2022-02-25 Rnor_6.0 NCBI GCA_009722195.1 Xenopus tropicalis 2022-01-24 Xenopus_tropicalis_v9.1 NCBI GCA_017527675.1 Phaeodactylum tricornutum 2022-03-24 Phatr3.0 NCBI GCA_011586775.1 Xenopus tropicalis 2022-04-11 Xenbase_v9.2 NCBI
$ head -3 ensamble.txt
GCA_000004195.4 Drosophila melanogaster 2021-07-01 dm6 NCBI GCA_011586765.1 Arabidopsis thaliana 2022-04-11 Araport11 NCBI GCA_009859395.1 Mus musculus 2022-02-08 GRCm39 NCBI
# Imprimeix la primera, la segona, la quarta i l’última columna del fitxer
$ gawk 'BEGIN{FS="\t"} {print $1, $2, $4, $NF}' ensamble.txt
GCA_000004195.4 Drosophila melanogaster dm6 NCBI GCA_011586765.1 Arabidopsis thaliana Araport11 NCBI GCA_009859395.1 Mus musculus GRCm39 NCBI GCA_004115215.2 Caenorhabditis elegans WBcel235 NCBI GCA_016590495.1 Rattus norvegicus Rnor_6.0 NCBI GCA_009722195.1 Xenopus tropicalis Xenopus_tropicalis_v9.1 NCBI GCA_017527675.1 Phaeodactylum tricornutum Phatr3.0 NCBI GCA_011586775.1 Xenopus tropicalis Xenbase_v9.2 NCBI
# Si s’indica que el separador de camp de la sortida OFS sigui també un tabulador, l’estructura final de l’arxiu s’assemblarà al d’entrada
$ gawk 'BEGIN{FS="\t"; OFS=FS} {print $1, $2, $4, $NF}' ensamble.txt
GCA_000004195.4 Drosophila melanogaster dm6 NCBI GCA_011586765.1 Arabidopsis thaliana Araport11 NCBI GCA_009859395.1 Mus musculus GRCm39 NCBI GCA_004115215.2 Caenorhabditis elegans WBcel235 NCBI GCA_016590495.1 Rattus norvegicus Rnor_6.0 NCBI GCA_009722195.1 Xenopus tropicalis Xenopus_tropicalis_v9.1 NCBI GCA_017527675.1 Phaeodactylum tricornutum Phatr3.0 NCBI GCA_011586775.1 Xenopus tropicalis Xenbase_v9.2 NCBI
# Es realitza una recerca literal en aquest fitxer
$ gawk 'BEGIN{FS="\t"; OFS=FS} /tropicalis/ {print $1, $2, $4, $NF}' ensamble.txt
GCA_009722195.1 Xenopus tropicalis Xenopus_tropicalis_v9.1 NCBI GCA_011586775.1 Xenopus tropicalis Xenbase_v9.2 NCBI
# Es realitza una recerca literal d’absència
$ gawk 'BEGIN{FS="\t"; OFS=FS} '\!/e/' {print $1, $2, $4, $NF}' ensamble.txt
GCA_011586765.1 Arabidopsis thaliana Araport11 NCBI GCA_009859395.1 Mus musculus GRCm39 NCBI
Si busques dominar gawk
, és crucial que aprenguis a manejar correctament les variables NR, FS i OFS. Els exemples anteriors et donaran una comprensió profunda del seu comportament per defecte, així com de com manipular-les per modelar adequadament l’estructura dels registres de dades. Per tant, et recomanem que els estudiïs amb deteniment.