我有多个 pdb 文件,并且我只想 grep 以 开头的那些行^FORMUL
,如果行C
后跟的数字大于(C3、C4、C5、C6 等),那么我不应该打印它。
我用这个来提取以 开头的行,FORMUL
但不知道如何搜索每一行并将其与 C 和 3> 匹配。
grep ^FORMUL *pdb
(可能这里必须放置某种截止点,如果在每行内发现 C3> 则不要打印它)。
3OC2.pdb:FORMUL 3 HOH *207(H2 O) (print it)
3OC7.pdb:FORMUL 2 SF4 FE4 S4 (print it)
3OC8.pdb:FORMUL 3 NIC C5 H7 N O7 (don't print, there is C5)
3OC9.pdb:FORMUL 4 HOH *321(H2 O) (print it)
3OC10.pdb:FORMUL 3 HEM 2(C34 H32 FE N4 O4) (don't print, there is C34)
答案1
使用两个 grep:
grep '^FORMUL' *pdb | grep -vE 'C([3-9]|[12][0-9])'
第一个列出匹配的行^FORMUL
,第二个删除(-v
反转匹配)那些匹配C
后跟 3 到 9 之间的数字,或者以 1 或 2 开头的两位数字的行(因此大于 3 的每个数字都将被删除)。
答案2
我认为这应该可行:
awk '/^FORMUL/ && !match($4, /C[3-9]?[0-9]/) {print;}' *.pdb
?:有我们可以尝试的在线数据源吗?
参考(第 154 页):ftp://ftp.wwpdb.org/pub/pdb/doc/format_descriptions/Format_v33_A4.pdf