我有一个文件如下
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