У меня есть несколько файлов 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)
Использование две власти:
grep '^FORMUL' *pdb | grep -vE 'C([3-9]|[12][0-9])'
Первые списки соответствие строк ^FORMUL
, второе удаляет (-v
инвертирует соответствие), те, которые соответствуют C
сопровождаемый цифрой между 3 и 9, или двузначные числа, начинающиеся 1 или 2 (таким образом, каждое число от большего, чем 3 будет удалено).
Я думаю, что это должно работать:
awk '/^FORMUL/ && !match($4, /C[3-9]?[0-9]/) {print;}' *.pdb
?: есть онлайн-источник данных, который мы могли бы попробовать?
ref (стр. 154): ftp: / /ftp.wwpdb.org/pub/pdb/doc/format_descriptions/Format_v33_A4.pdf