特定の列で特定の値を持つ行を見つけるには?

特定の列で特定の値を持つ行を見つけるには?

次のファイルがあります

  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  

最初の列に少数の0.000と0.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

私の考えではgrep最初の列に小数点が0.000と0.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

関連情報