У меня есть файл следующего вида
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