![Transponer filas en columnas al formato adecuado](https://rvso.com/image/164728/Transponer%20filas%20en%20columnas%20al%20formato%20adecuado.png)
Tengo 3 archivos de texto comoemp id.txt, antes sal.txt, ahora sal.txt. Contenido de estos 3 archivos: -
emp id.txt
emp id ----- 1 4 7 10 13 16 19
antes de sal.txt
before sal ----- 23 56 78 97 105 123 145
ahora sal
now sal ---- 25 60 82 99 109 124 150
Usé a continuación en el script de shell
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) } END{ for (i in RtoC) print RtoC[i] }'
para convertir de fila a columna, obtuve un resultado como:
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150
emp before now
id sal sal
--- ----- ----
Pero quiero resultados en el siguiente formato como:
--------------------------------
|emp id |before sal | now sal |
|--------|---------- | --------|
|1 | 23 | 25 |
|4 | 56 | 60 |
|7 | 78 | 82 |
|10 | 97 | 99 |
|13 | 105 | 109 |
|16 | 123 | 124 |
|19 | 145 | 150 |
--------------------------------
¿Podría ayudarme con esto para poder obtener el resultado en el formato anterior?
Respuesta1
step1:
for i in "emp_id.txt" "beforesal.txt" "nowsal.txt"; do perl -pne "s/ /\n/g" $i >> "$i"fi; done
step2:
paste emp_id.txtfi beforesal.txtfi nowsal.txtfi
producción
emp before now
id sal sal
----- ----- ----
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150
Respuesta2
define una pequeña función que transforma el archivo en una columna:
f2c() { tr -s '[:blank:]' '\n' < "$1"; }
luego use paste
para unir las columnas,sustituciones de procesoscomo argumentos de archivo para pegar y column
para obtener un resultado bonito.
paste <(f2c 'emp id.txt') <(f2c 'before sal.txt') <(f2c 'now sal.txt') | column -t
emp before now
id sal sal
----- ----- ----
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150
Respuesta3
dadoawk
dominioen realidad es muy parecido a lo que esperas como resultado, pero sí, divide el encabezado en líneas separadas debido a los espacios (esto no será un problema si tus archivos de entrada estaban separados con Tab u otra cosa), de todos modos no entendí cómo funciona el encabezado se va a imprimir en las últimas líneas, tal vez diferentes awk
versiones tenían diferentesclasificaciónopción por defecto; por ejemplo, PROCINFO["sorted_in"]="@val_num_desc"
su resultado sería similar al siguiente (pero aún no tiene idea de cómo se ordenaron los números en orden asc en el resultado esperado):
19 145 150
16 123 124
13 105 109
10 97 99
7 78 82
4 56 60
1 23 25
id sal sal
emp before now
----- ----- ----
Probemos con el comando modificado a continuación y veamos si eso es lo que necesita o se acerca a algo que realmente espera:
awk '{ $2=$1"_"$2; $1="";
for (i=2; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] "\t" $i: $i) }
END{ PROCINFO["sorted_in"]="@unsorted";
for (i in RtoC) print RtoC[i];
}' emp.txt before.txt new.txt |column -t
producción:
emp_id before_sal now_sal
----- ----- ----
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150