特定の列に特定の値を持つ行を 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  

最初の列に小数点.000と.500のみがある行のみをgrepしたいので、出力は次のようになります。

  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

関連情報