Estoy buscando transponer un archivo de formato largo usando una declaración awk o Python.
Mi archivo de entrada se vería así;
ID Chr_Position Geno 111 1_1234 0 111 1_12345 1 111 1_2345 0 111 2_23245 2y mi salida requerida quisiera ser (el encabezado no es necesariamente necesario)
ID 1_1234 1_12345 2_2345 111 0 1 0 2 112 1 1 1 1 113 1 1 0 2Son archivos grandes, más de 100 000 ID con más de 10 000 filas cada uno, pero se pueden dividir en más pequeños si es necesario. Tengo un código anterior que transpondrá filas y columnas, pero no estoy seguro de cómo sacarlo del formato largo.
No sé cómo generar la salida que publicaste dado el archivo de entrada que publicaste, pero tal vez esto te ayude a encaminarte:
$ cat tst.awk NR==1 { next } $1 != prev { if (line!="") print prev line; line=""; prev=$1 } { line = line OFS $NF } END { if (line!="") print prev line } $ awk -f tst.awk file 111 0 1 0 2si sus datos están bien estructurados (la misma cantidad de columnas/filas en el mismo orden, separadores consistentes), puede probar esto
$ sed 1d file | pr -4ats' ' | cut -d' ' -f1,3,6,9,12 111 0 1 0 2 112 1 0 4 3para el archivo de datos de prueba
$ cat file ID Chr_Position Geno 111 c1 0 111 c2 1 111 c3 0 111 c4 2 112 c1 1 112 c2 0 112 c3 4 112 c4 3