Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

388
Vistas
ordenar en Linux, seleccionar la última línea, canalizar a un nuevo archivo

Tengo una serie de varios archivos. Me gustaría ordenar estos archivos, seleccionar la línea inferior de cada uno y canalizar esas líneas en un nuevo archivo único.

Mis archivos se ven así:

 1, 100, 2.5 2, 100, 3.3 3, 100, 5.1 4, 100, 1.2

Todos estos archivos se denominan 51_Sur_extracted_data.csv

Los archivos se alojan en directorios principales de la siguiente manera:

Track_0001/output_dfsu/51_Sur_datos_extraídos.csv Track_0002/output_dfsu/51_Sur_datos_extraídos.csv

Así que me gustaría ordenar todos los archivos csv en la tercera columna, extraer la última línea y colocarla en un nuevo archivo de resumen. Básicamente, el objetivo es producir un archivo que tenga los valores máximos de la columna tres en todos los directorios principales. Idealmente, también me gustaría agregar una columna en el archivo de salida que contenga el nombre del directorio principal (Track_0002).

Tengo el tipo resuelto, pero el resto me está resultando un poco problemático. Por ejemplo, ¿puedo ordenar todos los archivos csv al mismo tiempo y escribir la salida en nuevos archivos (ejemplo 51_Sur_extracted_data_sort.csv)? ¿Entonces puedo grep la última línea y canalizarla a un nuevo archivo?

 sort -t"," -k3,3g filename

gracias

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

SI desea la última línea de cualquier comando dado, use tail .

Así que para ti, harías esto:

 sort -t"," -k3,3g filename | tail -n1 > newfilename
over 4 years ago · Santiago Trujillo Denunciar

0

Yo haría algo como esto:

 for a in */*/*.csv do dname="$(basename "$(dirname "$a")")" echo -e "$dname\t$(sort -t"," -k3,3g "$a" | tail -n 1)" done

En mis archivos de prueba devolvió:

 output_abcd 3, 100, 9.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.1 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.1 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 1, 100, 7.5 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.1 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.1 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.1 output_abcd 3, 100, 5.1 output_bcde 2, 100, 42.3 output_cdef 3, 100, 5.1 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.2 output_abcd 3, 100, 5.1 output_bcde 3, 100, 5.1 output_cdef 3, 100, 5.1

Sí, mis datos de entrada son un poco aburridos. Por supuesto, puedes ordenar el resultado final nuevamente , pero lo dejaré a tu imaginación (ya tenías ese paso) :)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda