{"id":262,"date":"2023-08-31T13:17:34","date_gmt":"2023-08-31T11:17:34","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/?page_id=262"},"modified":"2025-03-07T17:47:28","modified_gmt":"2025-03-07T15:47:28","slug":"1-13-2-conceptos-fundamentales","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/1-13-2-conceptos-fundamentales\/","title":{"rendered":"1.13.2. Conceptos fundamentales"},"content":{"rendered":"<p>El comando <code>gawk<\/code> es una herramienta capaz de ejecutar un bloque de c\u00f3digo sobre atributos individuales de cada registro almacenado en las l\u00edneas de un archivo de texto. Al procesar los datos, es posible generar una nueva l\u00ednea de resultados, que se puede mostrar por pantalla o guardar en un nuevo archivo de texto.<\/p>\n<p>El comando <code>gawk<\/code> recorre el contenido del archivo de texto l\u00ednea por l\u00ednea, separando autom\u00e1ticamente los distintos componentes de estas. El usuario tiene acceso a variables predefinidas que proporcionan informaci\u00f3n selectiva (ver tabla 11) y puede acceder a cada columna de una l\u00ednea a trav\u00e9s de su posici\u00f3n.<\/p>\n<div class=\"tabletitle\"><p>Tabla 11. Variables especiales de \u00abawk\u00bb.<\/p>\n<\/div>\n<table width=\"602\">\n<tbody>\n<tr class=\"table-header\">\n<td width=\"123\"><strong>Variable<\/strong><\/td>\n<td width=\"480\"><strong>Descripci\u00f3n<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>$0<\/code><\/td>\n<td width=\"480\">Contiene el contenido del registro de entrada<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>$1<\/code><\/td>\n<td width=\"480\">Primer campo<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>$2<\/code><\/td>\n<td width=\"480\">Segundo campo, y as\u00ed sucesivamente<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>NF<\/code><\/td>\n<td width=\"480\"><em>Number of fields<\/em>. N\u00famero de campos (n\u00famero de columnas)<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>FS<\/code><\/td>\n<td width=\"480\">Separador de campo de entrada<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>OFS<\/code><\/td>\n<td width=\"480\">Separador de campo de salida<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>NR<\/code><\/td>\n<td width=\"480\"><em>Number of records<\/em>. N\u00famero de registros (n\u00famero de l\u00edneas)<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>RS<\/code><\/td>\n<td width=\"480\">Separador de registro de entrada<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>ORS<\/code><\/td>\n<td width=\"480\">Separador de registro de salida<\/td>\n<\/tr>\n<tr>\n<td width=\"123\"><code>Filename<\/code><\/td>\n<td width=\"480\">Nombre del archivo de entrada actualmente en procesamiento.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"tablefooter\"><p>Fuente: elaboraci\u00f3n propia.<\/p>\n<\/div>\n<p>Importante: por defecto, el separador de campos es el espacio en blanco, y el separador de registros es el salto de l\u00ednea.<\/p>\n<p>En general, al int\u00e9rprete de comandos <code>gawk<\/code> se le suministran dos tipos de datos:<\/p>\n<ul>\n<li>un fichero de \u00f3rdenes o programa,<\/li>\n<li>uno o m\u00e1s archivos de entrada.<\/li>\n<\/ul>\n<p>Un fichero de \u00f3rdenes (que puede ser un fichero como tal, o puede presentarse al invocar\u00a0<code>gawk<\/code>\u00a0desde la l\u00ednea de comandos) contiene una serie de sentencias que le indican a\u00a0<code>gawk<\/code>\u00a0c\u00f3mo procesar el fichero de entrada. Es decir, contiene el\u00a0programa\u00a0escrito en sintaxis\u00a0<strong>GAWK<\/strong>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'programa_GAWK' archivo1 archivo2 \u2026<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk -f 'archivo_con_c\u00f3digo_GAWK' archivo1 archivo2<\/pre>\n<p>A continuaci\u00f3n, tenemos varios ejemplos. Primero se genera un archivo <em>in situ<\/em> con secuencias en formato FASTA y con l\u00edneas en blanco entre ellas.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ echo -e\u00a0 \"&gt;seq01\\nACCTAT\\n\\n&gt;seq02\\nCACCGA\\n\\n&gt;seq03\\nAAAACAGAG\\n\\n\" &gt; secuencias.txt<\/pre>\n<p># Visualizamos el fichero contando las l\u00edneas con la opci\u00f3n <em>-n<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ cat -n secuencias.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">1    &gt;seq01\r\n2    ACCTAT\r\n3 \r\n\r\n4    &gt;seq02\r\n\r\n5    CACCGA\r\n\r\n6 \r\n\r\n7    &gt;seq03\r\n\r\n8    AAAACAGAG\r\n\r\n9 \r\n\r\n10<\/pre>\n<p># Se utiliza <code>gawk<\/code> para imprimir solo las l\u00edneas que contengan al menos un campo <strong>no<\/strong> vac\u00edo<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'NF &gt; 0' secuencias.txt | nl<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">1   &gt;seq01\r\n\r\n2   ACCTAT\r\n\r\n3   &gt;seq02\r\n\r\n4   CACCGA\r\n\r\n5   &gt;seq03\r\n\r\n6   AAAACAGAG<\/pre>\n<p># Imprime las primeras 7 l\u00edneas<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'NR &lt;= 7' secuencias.txt | cat -n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">1   &gt;seq01\r\n\r\n2   ACCTAT\r\n\r\n3\r\n\r\n4   &gt;seq02\r\n\r\n5   CACCGA\r\n\r\n6\r\n\r\n7   &gt;seq03<\/pre>\n<p># Imprime las dos primeras l\u00edneas y a partir de la sexta; adem\u00e1s, elimina los registros vac\u00edos. En este caso el uso de los par\u00e9ntesis consigue que se cumplan las dos condiciones<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'NF &gt; 0 &amp;&amp; (NR &lt;= 2 || NR &gt;= 6)' secuencias.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">&gt;seq01\r\n\r\nACCTAT\r\n\r\n&gt;seq03\r\n\r\nAAAACAGAG<\/pre>\n<p>En el campo de la bioinform\u00e1tica, el fichero de entrada est\u00e1 normalmente estructurado con un formato tabla, por defecto con campos separados por espacios o tabuladores (tablas). Se muestran ejemplos con el comando <code>gawk<\/code> de las posibilidades de acci\u00f3n de este comando.<\/p>\n<p>Copia en tu terminal el fichero mostrado a continuaci\u00f3n y ll\u00e1malo <em>ensamble.txt<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">#assembly_accession\u00a0 organism_name\u00a0\u00a0 seq_rel_date\u00a0\u00a0\u00a0 asm_name\u00a0\u00a0 submitter\r\n\r\nGCA_000004195.4 Drosophila melanogaster\u00a0\u00a0\u00a0 2021-07-01 dm6\u00a0 NCBI\r\n\r\nGCA_011586765.1 Arabidopsis thaliana 2022-04-11 Araport11\u00a0 NCBI\r\n\r\nGCA_009859395.1 Mus musculus\u00a0\u00a0\u00a0 2022-02-08 GRCm39\u00a0\u00a0\u00a0 NCBI\r\n\r\nGCA_004115215.2 Caenorhabditis elegans\u00a0\u00a0\u00a0\u00a0 2022-03-16 WBcel235\u00a0\u00a0 NCBI\r\n\r\nGCA_016590495.1 Rattus norvegicus\u00a0\u00a0\u00a0 2022-02-25 Rnor_6.0\u00a0\u00a0 NCBI\r\n\r\nGCA_009722195.1 Xenopus tropicalis\u00a0\u00a0 2022-01-24 Xenopus_tropicalis_v9.1\u00a0\u00a0\u00a0 NCBI\r\n\r\nGCA_017527675.1 Phaeodactylum tricornutum\u00a0 2022-03-24 Phatr3.0\u00a0\u00a0 NCBI\r\n\r\nGCA_011586775.1 Xenopus tropicalis\u00a0\u00a0 2022-04-11 Xenbase_v9.2\u00a0\u00a0\u00a0 NCBI\r\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ head -3 ensamble.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GCA_000004195.4 Drosophila melanogaster\u00a0\u00a0\u00a0 2021-07-01 dm6 \r\nNCBI GCA_011586765.1 Arabidopsis thaliana 2022-04-11 Araport11\r\nNCBI GCA_009859395.1 Mus musculus\u00a0\u00a0\u00a0 2022-02-08 GRCm39\u00a0\u00a0\u00a0 NCBI<\/pre>\n<p># Imprime la primera, la segunda, la cuarta y la \u00faltima columna del fichero<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'BEGIN{FS=\"\\t\"} {print $1, $2, $4, $NF}' ensamble.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GCA_000004195.4 Drosophila melanogaster dm6 NCBI\r\n\r\nGCA_011586765.1 Arabidopsis thaliana Araport11\u00a0 NCBI\r\n\r\nGCA_009859395.1 Mus musculus GRCm39 NCBI\r\n\r\nGCA_004115215.2 Caenorhabditis elegans\u00a0\u00a0\u00a0\u00a0 WBcel235 NCBI\r\n\r\nGCA_016590495.1 Rattus norvegicus Rnor_6.0 NCBI\r\n\r\nGCA_009722195.1 Xenopus tropicalis Xenopus_tropicalis_v9.1 NCBI\r\n\r\nGCA_017527675.1 Phaeodactylum tricornutum Phatr3.0 NCBI\r\n\r\nGCA_011586775.1 Xenopus tropicalis Xenbase_v9.2 NCBI<\/pre>\n<p># Si se indica que el <strong>separador de campo de la salida<\/strong>\u00a0OFS sea tambi\u00e9n un tabulador, la estructura final del archivo se parecer\u00e1 al de entrada<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'BEGIN{FS=\"\\t\"; OFS=FS} {print $1, $2, $4, $NF}' ensamble.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GCA_000004195.4 Drosophila melanogaster\u00a0\u00a0\u00a0 dm6\u00a0 NCBI\r\n\r\nGCA_011586765.1 Arabidopsis thaliana Araport11\u00a0 NCBI\r\n\r\nGCA_009859395.1 Mus musculus\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GRCm39\u00a0\u00a0\u00a0\u00a0 NCBI\r\n\r\nGCA_004115215.2 Caenorhabditis elegans\u00a0\u00a0\u00a0\u00a0 WBcel235\u00a0\u00a0 NCBI\r\n\r\nGCA_016590495.1 Rattus norvegicus\u00a0\u00a0\u00a0 Rnor_6.0\u00a0\u00a0 NCBI\r\n\r\nGCA_009722195.1 Xenopus tropicalis\u00a0\u00a0 Xenopus_tropicalis_v9.1\u00a0\u00a0\u00a0 NCBI\r\n\r\nGCA_017527675.1 Phaeodactylum tricornutum\u00a0 Phatr3.0\u00a0\u00a0 NCBI\r\n\r\nGCA_011586775.1 Xenopus tropicalis\u00a0\u00a0 Xenbase_v9.2\u00a0\u00a0\u00a0 NCBI<\/pre>\n<p># Se realiza una b\u00fasqueda literal en este fichero<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'BEGIN{FS=\"\\t\"; OFS=FS} \/tropicalis\/ {print $1, $2, $4, $NF}' ensamble.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GCA_009722195.1 Xenopus tropicalis\u00a0\u00a0 Xenopus_tropicalis_v9.1\u00a0\u00a0\u00a0 NCBI\r\n\r\nGCA_011586775.1 Xenopus tropicalis\u00a0\u00a0 Xenbase_v9.2\u00a0\u00a0\u00a0 NCBI<\/pre>\n<p># Se realiza una b\u00fasqueda literal de ausencia<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ gawk 'BEGIN{FS=\"\\t\"; OFS=FS} '\\!\/e\/' {print $1, $2, $4, $NF}' ensamble.txt<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GCA_011586765.1 Arabidopsis thaliana Araport11\u00a0 NCBI\r\n\r\nGCA_009859395.1 Mus musculus\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GRCm39\u00a0\u00a0\u00a0\u00a0 NCBI<\/pre>\n<p>Si buscas dominar <code>gawk<\/code>, es crucial que aprendas a manejar correctamente las variables NR, FS y OFS. Los ejemplos anteriores te dar\u00e1n una comprensi\u00f3n profunda de su comportamiento por defecto, as\u00ed como de c\u00f3mo manipularlas para modelar adecuadamente la estructura de los registros de datos. Por lo tanto, te recomendamos que los estudies con detenimiento.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El comando gawk es una herramienta capaz de ejecutar un bloque de c\u00f3digo sobre atributos individuales de cada registro almacenado en las l\u00edneas de un archivo de texto. Al procesar los datos, es posible generar una nueva l\u00ednea de resultados, que se puede mostrar por pantalla o guardar en un nuevo archivo de texto. El [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/262"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/comments?post=262"}],"version-history":[{"count":21,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/262\/revisions"}],"predecessor-version":[{"id":1310,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/262\/revisions\/1310"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/media?parent=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}