在我以前的問題(https://stackoverflow.com/a/25735444/3767980)中,在jaypal的幫助下,我能夠爲ambigous和unambigous案例格式化我的約束。讓我們考慮這裏的含糊不清,因爲它更難。用VCG *替換perl腳本中的VCG1或VCG2
我有限制,看起來像
G6N-D5C-?: (116.663, 177.052, 29.149) K87CD/E85CB/E94CB/H32CB/Q21CB
L12N-T11C-?: (128.977, 175.109, 174.412) K158C/H60C/A152C/N127C/Y159C(notH60C)
K14N-E13C-?: (117.377, 176.474, 29.823) I187CG1/V78CG2
A75N-Q74C-?: (123.129, 177.253, 23.513) V131CG1/V135CG1/V78CG1
,並受到以下perl腳本:
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
#
open my $fh, '<', $ARGV[0];
while (<$fh>) {
my @values = map { /.(\d+)(\w+)/; $1, $2 } split '/', (split)[-1];
my ($resid, $name) = /^[^-]+-.(\d+)(\w+)-/;
print "assign (resid $resid and name $name) (";
print join (" or ",
map { "resid $values[$_] and name $values[$_ + 1]" }
grep { not $_ % 2 } 0 .. $#values
);
print ") 3.5 2.5 4.5 ! $_";
}
與輸出:
assign (resid 5 and name C) (resid 87 and name CD or resid 85 and name CB or resid 94 and name CB or resid 32 and name CB or resid 21 and name CB) 3.5 2.5 8.5 ! G6N-D5C-?: (116.663, 177.052, 29.149) K87CD/E85CB/E94CB/H32CB/Q21CB
assign (resid 11 and name C) (resid 158 and name C or resid 60 and name C or resid 152 and name C or resid 127 and name C or resid 159 and name C) 3.5 2.5 8.5 ! L12N-T11C-?: (128.977, 175.109, 174.412) K158C/H60C/A152C/N127C/Y159C(notH60C)
assign (resid 13 and name C) (resid 187 and name CG1 or resid 78 and name CG2) 3.5 2.5 8.5 ! K14N-E13C-?: (117.377, 176.474, 29.823) I187CG1/V78CG2
assign (resid 74 and name C) (resid 131 and name CG1 or resid 135 and name CG2 or resid 78 and name CG1) 3.5 2.5 8.5 ! A75N-Q74C-?: (123.129, 177.253, 23.513) V131CG1/V135CG1/V78CG1
- 我需要幫助的是包含以
V
後跟2或3位數字開頭的條目以及!
後面的CG1
或CG2
。例子是V78CG2或V135CG1。 - 我需要剋制相應的條目來處理通配符。也就是說,我需要限制返回像:
assign (resid 5 and name C) (resid 87 and name CD or resid 85 and name CB or resid 94 and name CB or resid 32 and name CB or resid 21 and name CB) 3.5 2.5 8.5 ! G6N-D5C-?: (116.663, 177.052, 29.149) K87CD/E85CB/E94CB/H32CB/Q21CB
assign (resid 11 and name C) (resid 158 and name C or resid 60 and name C or resid 152 and name C or resid 127 and name C or resid 159 and name C) 3.5 2.5 8.5 ! L12N-T11C-?: (128.977, 175.109, 174.412) K158C/H60C/A152C/N127C/Y159C(notH60C)
assign (resid 13 and name C) (resid 187 and name CG1 or resid 78 and name CG*) 3.5 2.5 8.5 ! K14N-E13C-?: (117.377, 176.474, 29.823) I187CG1/V78CG2
assign (resid 74 and name C) (resid 131 and name CG* or resid 135 and name CG* or resid 78 and name CG*) 3.5 2.5 8.5 ! A75N-Q74C-?: (123.129, 177.253, 23.513) V131CG1/V135CG1/V78CG1
我需要建議選擇匹配的行,然後再進行塗敷transfomation到集羣輸入(!
之前)。我可以找到符合V.*CG[1-2]
的基本正則表達式的行。
我想要一個在上面的perl腳本中的解決方案。
如果有什麼不清楚的地方,請發表評論。我還是比較新的。我提前感謝您的建議。
你瞭解腳本你在工作?如果沒有,我會建議你試着找出解釋或者要求解釋,然後修改腳本以適當地處理這些行。 – 2014-09-23 07:09:19
我明白它是如何工作的除了地圖的一切。我能夠爲模棱兩可的情況生成類似的腳本。我在地圖邏輯上遇到了麻煩,但我一直在閱讀它。我真的只需要幫助,彌補選擇線路和匹配相應的V CG限制之間的差距。我認爲最後做這件事最容易。我非常自信,我可以在bash中做到這一點,但我希望只使用一個腳本。我可以使用bash解決方案來補充我的問題。 – PhysicalChemist 2014-09-23 07:21:29
哪個「地圖」行?第一個,用正則表達式呢? – 2014-09-23 08:12:48