es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

cómo ignorar la acción de imprimir el valor de un campo utilizando awk

Hola, tengo varios archivos cuya línea inicial (o registro) sigue este formato:

cat file_1.txt | grep '>'
> CP022114.1 Kluyvera georgiana strain YDC799 chromosome, complete genome

Quiero extraer el segundo campo de ese registro, que corresponde a la categoría taxonómica de género. En este ejemplo es “Kluyvera”. Para ello, utilizo esto:

awk 'NR==1{print $2}' file.txt

y obtengo:

Kluyvera

El problema es que en algunos archivos el segundo campo no corresponde a la categoría taxonómica de género, sino que el género está precedido por la cadena “candidatus”:

cat file_2.txt | grep '>'
> NTKC01000006.1 Candidatus Thioglobus sp. MED-G25 SUP05-clade-MED-G25-C6, whole genome shotgun sequence

En el registro anterior, “Thioglobus” es el género de la especie. Entonces, cuando intento el comando awk anterior, me devuelve “Candidatus”.

Quiero que awk imprima “este archivo tiene candidatus” en lugar de extraer el segundo campo para ese registro.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes modificar el comando awk para verificar si el segundo campo comienza con la cadena “Candidatus”. Si es así, entonces imprime el mensaje deseado, de lo contrario imprime el segundo campo como antes. Así es como se vería el nuevo comando:

    awk 'NR==1{if($2 ~ /^Candidatus/) {print "Este archivo tiene Candidatus"} else {print $2}}' file.txt
    

    Ahora, cuando ejecutes este comando en “file_2.txt”, imprimirá “Este archivo tiene Candidatus” en lugar de “Candidatus”. Para archivos donde el segundo campo corresponda a la categoría taxonómica de género, aún imprimirá el nombre del género como antes.

Comments are closed.