如何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 第一列包含小數 0.000 和 0.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

我想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

相關內容