Necesito ordenar las columnas de un conjunto de datos muy grande (1000 líneas y 700000 columnas). Como ejemplo, mis columnas están ordenadas aleatoriamente como: col1 col4 col3 col2, y necesito ordenar eso.
He estado intentando algunos comandos, pero no he tenido éxito.
ejemplo:
ID M2 M5 M8 M1 M3 M9 .....M7000000
Animal1 1 0 2 1 0 2 .....1
Animal2 0 1 2 0 1 1 .....0
Animal3 2 1 0 1 2 1 .....0
.
.
.
.
Animaln
En este ejemplo, los puntos significan que tengo muchas columnas y líneas. Nuevamente, necesito ordenar las columnas para que sean como:
ID M1 M2 M3 M4 M5 M6 .....M7000000
Animal1 1 0 2 1 0 2 .....1
Animal2 0 1 2 0 1 1 .....0
Animal3 2 1 0 1 2 1 .....0
.
.
.
.
Animaln
Gracias
text-processing
awk
LLVerardo
fuente
fuente

Respuestas:
Con GNU
datamashy GNUsort:Esto funciona bien para datos "razonablemente pequeños". Puede o no funcionar con su archivo.
Editar: Las soluciones a continuación sin transposiciones deberían consumir menos recursos.
fuente
datamashpor ejemplors -T < file_in.csv | sort | rs -T -C' '(rsdebe estar disponible como un paquete en sistemas basados en Debian)rs("remodelar una matriz de datos") está disponible en los sistemas base de algunos BSD.Maparece al principio, usando el bien conocidoSchwartzian maneuver. Esto nos proporciona los índices reordenados para que las columnas salgan ordenadas numéricamente (M1, M2, M3, ...)@Ipara reorganizar los@Felementos.-pLa opción de Perl habilita la impresión automática de$_contenidos,-lagregará elnewline.fuente
Usando el módulo perl Ordenar :: Naturalmente
los datos de entrada
salida
fuente
Si tiene instalada la
rsutilidad , puede hacer esto:O todo en una línea:
rstranspone los datos de entrada (con campos espaciados)sedlee la primera línea, la emite y luego se cierra, dejandorsintacto el resto de la tubería .stdbufes necesario para garantizar quesedsolo se lee hasta la primera línea nueva y no más, al desactivar el almacenamiento en búfer de entradasorts las líneas restantesrstranspone la secuencia resultante a su formato original.rsse instala por defecto en MacOS. En los sistemas Linux puede que tenga que instalarlo, p. Ej.Advertencia:
stdbufysorts-Vopción son específicas de GNU así que no funcionará en MacOS no modificados.fuente
Si tienes GNU
awk, puedes probar esto:fuente
En Python:
fuente
No sé si consideraste esto como una buena respuesta, pero ...
¿Por qué no usa una base de datos para resolver este problema? puede importar su conjunto de datos como una tabla temporal y luego hacer un
Puede usar otros filtros o transformaciones según lo necesite. Luego, puede formatear su salida según lo necesite.
Todas estas tareas podrían programarse como un script bash y encadenar salidas utilizando tuberías.
A veces se me ha utilizado el comando "pv" para ver el progreso de salida entre comandos.
Para importar el conjunto de datos, puede programar un ETL utilizando Pentaho Data Integration.
fuente
Quizás esto también te pueda ayudar.
Ex:
fuente