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
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
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) :)