GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Encontrar las líneas con el valor más bajo en su tercera columna dados los resultados de Grep?

Tengo un archivo que consta de líneas como esta (otros números incluidos). Esto es parte de la salida de

$ grep 1848 filename.csv

¿Cómo puedo encontrar las 5 líneas principales que tienen la tercera columna más baja en .csv? dado que 1848 está en la primera o en la segunda columna?

1848,2598,11.310694021273559
1848,2599,10.947275955606203
1848,2600,10.635270124233982
1848,2601,11.916564552040725
1848,2602,12.119810736845844
1848,2603,12.406661156256154
1848,2604,10.636275056472996
1848,2605,12.549890992708612
1848,2606,9.783802450936204
1848,2607,11.253697489670264
1848,2608,12.16385432290674
1848,2609,10.30355814063016
1848,2610,12.102525596913923
1848,2611,11.636595992818505
1848,2612,10.741178028606866
1848,2613,11.352414275107423
1848,2614,12.204860161717253
1848,2615,12.959915468475387
1848,2616,11.320652192610872

Desafortunadamente, 1848 a veces también aparece en la tercera columna y necesito ignorar eso:

6687,8963,9.241848677632822
6687,9111,10.537325656184889
6687,9506,11.315629894841848

Respuesta aceptada:

Con clasificación GNU:

grep -E '(^1848|^[0-9]{4},1848)' file | sort -t, -k3n | head -n 5

(si la primera columna puede tener menos o más de exactamente 4 dígitos, reemplace {4} con + )

Salida:

1848,2606,9.783802450936204
1848,2609,10.30355814063016
1848,2600,10.635270124233982
1848,2604,10.636275056472996
1848,2612,10.741178028606866

Ubuntu
  1. Trabajando con tuberías en la línea de comando de Linux

  2. ¿Cómo unir líneas que no comienzan con "#" o ";"?

  3. ¿Cómo contar el número de líneas en un archivo después de una coincidencia Grep?

  4. ¿Puedo actualizar el sistema con un Live Cd?

  5. Linux:grep desde ciertas líneas hasta el final del archivo

Usando el comando GREP en Linux con ejemplos

El tutorial de comando Grep con ejemplos para principiantes

El tutorial de comandos Uniq con ejemplos para principiantes

Manipulación de texto en la línea de comando con grep

¿Cómo reemplazar el contenido de una columna específica con awk?

Grep líneas que comienzan con 1, pero no 10, 11, 100, etc.