Как выполнить grep строк, имеющих определенное значение в определенном столбце?

Как выполнить grep строк, имеющих определенное значение в определенном столбце?

У меня есть файл следующего вида

  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  

Я хотел бы выполнить grep только тех строк, которые содержат в первом столбце десятичные числа .000 и .500, поэтому вывод будет таким:

  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  

решение1

Вы не используете grep. Используйте awk.

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

решение2

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

Первый столбец $1будет сопоставлен с /\.500|\.000/точками, экранированными так, чтобы они были буквальными точками, а не регулярным выражением, любым символом, если ~это частичное совпадение, и выведет всю строку.$0

решение3

Я хотел быгрэптолько строки, в первом столбце которых есть десятичные числа .000 и .500

Моя первая мысль

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

Быстрый тест с использованием 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

Есть более краткие способы выразить это.

$ 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

Если первый столбец может иметь целую часть, отличную от 3-значной

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

В некоторых случаях вам может потребоваться использовать [:digit:]вместо [0-9].

И так далее.

man grepтвой друг.

решение4

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

Связанный контент