Tengo el siguiente conjunto de datos guardado en un archivo de texto como se muestra a continuación;
Case name Case_12
d1 0.2
d2 0.1
d3 2.2
d4 1.29
d5 0
d6 -1.10
d7 0.007
d8 -0.421
d9 -0.680
d10 -0.206
Case name Case_1
d1 0.2
d2 0.1
d3 2.2
d4 1.17
d5 0
d6 -1.09
d7 0.003
d8 -0.458
d9 -0.640
d10 -0.030
Case name Case_2
d1 0.2
d2 0.1
d3 2.2
d4 1.15
d5 0
d6 -1.17
d7 0.005
d8 -0.504
d9 -0.670
d10 -0.023
¿Hay alguna forma de posprocesar los siguientes datos de tal manera que el resultado sea el deseado?
Case name d1 d2 d6 d7 d8 d9 d10
Case_1 0.2 0.1 -1.09 0.003 -0.458 -0.640 -0.030
Case_2 0.2 0.1 -1.17 0.005 -0.504 -0.670 -0.023
Case_12 0.2 0.1 -1.10 0.007 -0.421 -0.680 -0.206
¡Gracias por la ayuda!
Respuesta1
Si el número de d
s en cada grupo es el mismo y está ordenado, podemos hacer:
<infile awk -v d=10 '
BEGIN{ printf "Case_name" ;
while (i++<d) { printf FS "d"i; };
print "";
}
/Case name/{ if (line) { print line }; line=$NF; next }
{ line = line FS $NF; }
END{ print line }' |column -t
Otro enfoque alternativo y evitar generar encabezado manualmente en d
s:
<infile awk '
/Case name/{ if (h && !is_h) { print h; is_h=1 };
if (line) { print line; };
h="Case_name"; line= $NF;
next;
}
!is_h { h= (h? h FS $1 : $1); }
{ line= (line? line FS $NF : $NF); }
END{ print line }' |column -t
producción:
Case_name d1 d2 d3 d4 d5 d6 d7 d8 d9 d10
Case_12 0.2 0.1 2.2 1.29 0 -1.10 0.007 -0.421 -0.680 -0.206
Case_1 0.2 0.1 2.2 1.17 0 -1.09 0.003 -0.458 -0.640 -0.030
Case_2 0.2 0.1 2.2 1.15 0 -1.17 0.005 -0.504 -0.670 -0.023