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 agregar columnas con variables de cadena en awk.

En Linux, usando un bucle for, quiero generar cada nuevo archivo txt a partir de un grupo de archivos txt de entrada, seleccionando dos columnas (columna 1 y 4), y luego agregando una nueva columna 3, 4 y 5 con variables de cadena definidas. Uno de los nombres de archivo de entrada es:
ninguno
E2_NCAPG_r1_UCSC_DNA_exon_fraction_counts.txt

Para este archivo de entrada, el archivo de salida que quiero es:
“`ninguno
AluJb 165824 E2 DNA exon

AluSp 43328 E2 DNA exon

AluSc5 5753 E2 DNA exon
“`

Intenté:

bash
for file in ls E2*.txt; do
treat=echo ${file} | cut -d'_' -f1 &&
TE=echo ${file} | cut -d'_' -f5 &&
region=echo ${file} | cut -d'_' -f6 &&
awk 'BEGIN{OFS="\t"} {print $1,$4,$3==treat,$4==TE,$5==region}' $file > ./E2_counts/${file}_tmp.txt
done

Pero no funcionó.

¡Gracias por la ayuda!

Tags:  

Answer

  1. Avatar for davy.ai

    Para generar un nuevo archivo txt a partir de un grupo de archivos txt de entrada, seleccionando columnas específicas y agregando nuevas columnas con variables de cadena definidas, se puede utilizar un bucle for con el comando awk.

    Supongamos que tenemos un archivo de entrada llamado “E2_NCAPG_r1_UCSC_DNA_exon_fraction_counts.txt” del cual queremos crear el archivo de salida con el siguiente contenido:

    AluJb   165824  E2  DNA exon
    AluSp   43328   E2  DNA exon
    AluSc5  5753    E2  DNA exon
    

    Para lograr esto, podemos utilizar el siguiente bucle for con el comando awk:

    for file in E2*.txt; do
        awk 'BEGIN{OFS="\t"} {print $1, $4, "E2", "DNA", "exon"}' "$file" > "${file}_new.txt"
    done
    

    En este bucle, iteramos sobre todos los archivos txt que comienzan con “E2” en sus nombres. Para cada archivo, usamos el comando awk para seleccionar las primera y cuarta columnas, y agregamos tres nuevas columnas con las variables de cadena “E2”, “DNA” y “exon”. El resultado se redirige a un nuevo archivo txt con el nombre del archivo de entrada seguido de “_new.txt”.

    Nota que utilizamos OFS="\t" para establecer el separador de campo de salida como una tabulación, de modo que las columnas estén correctamente alineadas en el archivo de salida. Además, encerramos la variable $file entre comillas dobles para manejar nombres de archivo con espacios o caracteres especiales.

Comments are closed.