Hola, tengo algunos directorios y se ve como a continuación:
TBS890
|___________ A.ctab
TBS345A
|___________ A.ctab
TBS567C
|___________ A.ctab
Estoy interesado en extraer algunos datos de los archivos A.ctab presentes en todos los directorios. digamos A.ctab
que tiene 12 columnas. Estoy interesado en las columnas 6 y 12. Para eso estoy tratando de hacer lo que se muestra a continuación, pero no obtengo toda la información.
awk 'FNR==1 { print substr(FILENAME,1,$NF) >substr(FILENAME,1,$NF)".tmp" }
FNR >1 { print $12 > substr(FILENAME,1,$NF)".tmp" }
NR==FNR{ print $6 >"first_column.tmp" }' TBS*/A.ctab
Como puede ver en mi comando anterior, utilicé $NF
cuál será el final del archivo FILENAME
. Sé que esto está mal, ¿alguien puede ayudarme?
Si ve en mi ejemplo anterior, dos directorios terminan con el alfabeto ann, pero un directorio no. Lo que tengo que dar para conseguir el nombre hasta el final.
t_id chr strand start end t_name num_exons length gene_id gene_name cov FPKM
1 1 - 10060 10614 MSTRG.1.1 1 555 MSTRG.1 . 0.000000 0.000000
2 1 + 11140 30023 MSTRG.10.1 12 3981 MSTRG.10 . 2.052715 0.284182
3 1 - 11694 29342 MSTRG.11.1 8 6356 MSTRG.11 . 0.557588 0.077194
4 1 + 11869 14409 ENST00000456328.2 3 1657 MSTRG.10 DDX11L1 0.000000 0.000000
5 1 + 11937 29347 MSTRG.10.3 12 3544 MSTRG.10 . 0.000000 0.000000
6 1 - 11959 30203 MSTRG.11.2 11 4547 MSTRG.11 . 0.369929 0.051214
7 1 + 12010 13670 ENST00000450305.2 6 632 MSTRG.10 DDX11L1 0.000000 0.000000
8 1 + 12108 26994 MSTRG.10.5 10 5569 MSTRG.10 . 0.057091 0.007904
9 1 + 12804 199997 MSTRG.10.6 12 3567 MSTRG.10 . 0.000000 0.000000
10 1 + 13010 31097 MSTRG.10.7 12 4375 MSTRG.10 . 0.000000 0.000000
11 1 - 13068 26832 MSTRG.11.3 9 5457 MSTRG.11 . 0.995280 0.137788
De todos los A.ctab
archivos quiero extraer solo t_name
una FPKM
columna y crear un archivo nuevo. En el nuevo archivo, la FPKM
columna debe ser el nombre de la muestra. Debería verse como a continuación:
t_name TBS890 TBS345A TBS567C
MSTRG.1.1 0 0.028181 0
MSTRG.10.1 0.284182 0.002072 0.046302
MSTRG.11.1 0.077194 0.685535 0.105849
ENST00000456328.2 0 0.307315 0.038961
MSTRG.10.3 0 0.446015 0.009946
MSTRG.11.2 0.051214 0.053577 0.036081
ENST00000450305.2 0 0.110438 0.040319
MSTRG.10.5 0.007904 0 1.430825
MSTRG.10.6 0 0 0.221105
MSTRG.10.7 0 0.199354 0
MSTRG.11.3 0.137788 0.004792 0
Respuesta1
En caso de que TODOS los archivos tengan un t_name
número de líneas idéntico, intente
$ awk '
FNR == NR {print $6 > "COL1.TMP"
}
FNR == 1 {FN = FILENAME
sub (/\/[^\/]*$/, ".TMP", FN)
print FN > FN
next
}
{print $12 > FN
}
' TBS*/A.ctab
$ paste -d"\t\t\t\n" COL1.TMP TBS*.TMP
Si ese no es el caso, join
me viene a la mente la utilidad; pero requiere entradas ordenadas.