Как отображать определенные строки и печатать только те, которые соответствуют символу

У меня есть несколько файлов 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)
3
задан 8 January 2018 в 13:42

2 ответа

Использование две власти:

grep '^FORMUL' *pdb | grep -vE 'C([3-9]|[12][0-9])'

Первые списки соответствие строк ^FORMUL, второе удаляет (-v инвертирует соответствие), те, которые соответствуют C сопровождаемый цифрой между 3 и 9, или двузначные числа, начинающиеся 1 или 2 (таким образом, каждое число от большего, чем 3 будет удалено).

4
ответ дан 8 January 2018 в 13:42

Я думаю, что это должно работать:

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

1
ответ дан 8 January 2018 в 13:42

Другие вопросы по тегам:

Похожие вопросы: