qiime 分析から取得した 2 つの形式があります。1 つは silva データベースから取得し、もう 1 つは GreenGenes から取得しました。これらのファイルの違いは、silva ファイルには分類群ごとにプログレッシブ D_number (kingdom= D_0__、phylum= D_1__、clase= D_2__ など) があり、GreenGenes ファイルには各分類群に文字 (kingdom= K__、phylum= p__) があることです。 、clase= c__ など)
file_1 (Silva format)
D_0__Archaea;D_1__Euryarchaeota;D_2__Thermoplasmata;D_3__Thermoplasmatales;D_4__ASC21;D_5__uncultured euryarchaeote
file_2(GreenGenes format)
k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Streptomycetaceae;g__Streptomyces
そこで、Perl で 2 つのスクリプト (Silva 用と GreenGenes 用) を作成し、各分類群を個別のファイルに抽出しました。
両方の形式の一致セクションにコードを組み込もうとしています。つまり:
16 行目では、次のような 2 つのオプションが必要です。
my @kingd=($taxon_value[0]=~m/D_0__(.*);D_1/g | m/k__(.*);p/g);
まあ、それがうまくいかないことはわかっています
では、正規表現の一致のために同じ行に2つ以上のオプションを追加するにはどうすればよいですか??
これはスクリプトの一部です (オプションは 6 つあり、Kingdom オプションを記述しただけです !!):
while (<INPUTFILE>){
$line=$_;
chomp($line);
if ($line=~ m/^#/g){
next;
}
elsif ($line=~ m/^[Uu]nassigned/g){
next;
}
elsif ($line){
my @full_line = $_;
foreach (@full_line){
my (@taxon_value)= split (/\t/, $_);
foreach ($taxon_value[0]){
if ($kingdom){
my @kingd=($taxon_value[0]=~m/D_0__(.*);D_1/g); # just for silva
foreach (@kingd){
if ($_=~/^$/){
next;
}
elsif ($_=~ m/^[Uu]nknown/g){
next;
}
elsif ($_=~ m/^[Uu]ncultured$/g){
next;
}
elsif ($_=~ m/^[Uu]nidentified$/g){
next;
}
else {
push @taxon_list, $_;
}
}
}
}
}
}
ありがとう