Mam kilka plików pdb i chcę zachować tylko te wiersze, które zaczynają się od, ^FORMUL
a jeśli po wierszu C
występuje liczba większa niż (C3,C4,C5,C6..100 etc)
wtedy, nie powinienem go drukować. Drugi warunek jest taki, że w każdej linii suma C, H and N
powinna wynosić co najmniej 6.
Więc ogólnie usuń wiersze, po których C
następuje liczba, 2>
a suma C+O+N
to >=
6.
FORMUL 3 HOH *207(H2 O) (print it)
FORMUL 2 SF4 FE4 S4 (print it)
FORMUL 3 NIC C5 H7 N O7 (don't print, there is C5)
FORMUL 4 HOH *321(H2 O) (print it)
FORMUL 3 HEM 2(C34 H32 FE N4 O4) (don't print, there is C34)
Próbowałem to zrobić, perl
ale linie są tak różne od siebie, więc nie jestem pewien, czy jest to możliwe.
command-line
text-processing
djordje
źródło
źródło
grep '^FORMUL' *pdb | grep -vE 'C([3-9]|[12][0-9])'
ponieważ chciałem usunąć te wiersze, które późniejC
mają liczbę większą niż 3. Oba warunki powinny zostać uwzględnione, ale nie razem, co oznacza, że jeśli mamC2 N5 02
, jest nadal w porządku, chociaż po C następuje1
C3 N1 01
nie należy usuwać, ponieważ ogólnie jest to mniej niż 5,C2 N4 02
należy usunąć, chociażC2
istnieją, ogólnie jest to więcej niż 6. Ogólnie usunąć wszystkie wiersze, w którychC>2
isum is 6
.Odpowiedzi:
Oto moja sugestia, niestety nie mam teraz czasu, aby napisać wyjaśnienie:
Jak tego użyć:
Oto bardzo prosty skrypt, który po prostu wypisuje wiersze do zachowania:
Jak tego użyć:
źródło
C34 H32 FE N4 O4
które są nieco dziwne.Chociaż nie jest napisany jako skrypt powłoki, jeśli ktoś skorzysta z niego w przyszłości, oto odpowiedź, jak to zrobić w Perlu.
źródło