¿Cómo agrupar filas que tienen cierto valor en una columna específica?

¿Cómo agrupar filas que tienen cierto valor en una columna específica?

tengo un archivo como el siguiente

  200.000    1.353    0.086
  200.250    1.417    0.000
  200.500    1.359    0.091
  200.750    1.423    0.000
  201.000    1.365    0.093
  201.250    1.427    0.000
  201.500    1.373    0.093
  201.750    1.432    0.000
  202.000    1.383    0.091
  202.250    1.435    0.000
  202.500    1.392    0.087
  202.750    1.436    0.000
  203.000    1.402    0.081
  203.250    1.437    0.001
  203.500    1.412    0.073
  204.000    1.423    0.065
  204.500    1.432    0.055
  205.000    1.441    0.045  

Me gustaría grep solo las filas que tienen en la primera columna el decimal .000 y .500 solamente para que el resultado sea así

  200.000    1.353    0.086
  200.500    1.359    0.091
  201.000    1.365    0.093
  201.500    1.373    0.093
  202.000    1.383    0.091
  202.500    1.392    0.087
  203.000    1.402    0.081
  203.500    1.412    0.073
  204.000    1.423    0.065
  204.500    1.432    0.055
  205.000    1.441    0.045  

Respuesta1

No usas grep. Usar awk.

"your data" | awk '$1 ~ /\.[05]00/'

Respuesta2

awk '$1 ~ /\.[50]00/ { print $0 }' myFile.txt

La primera columna $1se comparará con /\.500|\.000/los puntos, se escaparán para que sean puntos literales, no registren ningún carácter, la ~coincidencia sea parcial y se imprima la línea completa.$0

Respuesta3

Me gustaríagrepsolo las filas que tienen en la primera columna el decimal .000 y .500

Mi primer pensamiento

grep '^ *[0-9][0-9][0-9]\.[50]00' filename

Prueba rápida usando WSL

$ head testdata
              200.000    1.353    0.086
              200.250    1.417    0.000
              200.500    1.359    0.091
              200.750    1.423    0.000
              201.000    1.365    0.093
              201.250    1.427    0.000
              201.500    1.373    0.093
              201.750    1.432    0.000
              202.000    1.383    0.091
              202.250    1.435    0.000
$ grep '^ *[0-9][0-9][0-9]\.[50]00' testdata
              200.000    1.353    0.086
              200.500    1.359    0.091
              201.000    1.365    0.093
              201.500    1.373    0.093
              202.000    1.383    0.091
              202.500    1.392    0.087
              203.000    1.402    0.081
              203.500    1.412    0.073
              204.000    1.423    0.065
              204.500    1.432    0.055
              205.000    1.441    0.045

Hay formas más concisas de expresar esto.

$ grep -E '^ *[0-9]{3}\.[50]00' testdata
              200.000    1.353    0.086
              200.500    1.359    0.091
              201.000    1.365    0.093
              201.500    1.373    0.093
              202.000    1.383    0.091
              202.500    1.392    0.087
              203.000    1.402    0.081
              203.500    1.412    0.073
              204.000    1.423    0.065
              204.500    1.432    0.055
              205.000    1.441    0.045

Si la primera columna puede tener una parte entera que no sea de 3 dígitos

grep -E '^ *[0-9]+\.[05]00' testdata

En algunas circunstancias, es posible que necesites utilizarlo [:digit:]en lugar de [0-9].

Etcétera.

man grepes tu amigo.

Respuesta4

 grep -e '2[^ ]*.000' -e '2[^ ]*.500' file.txt

información relacionada