如何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

相关内容