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!
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:
Para lograr esto, podemos utilizar el siguiente bucle for con el comando awk:
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.