簡體   English   中英

如何在Perl中使用map和grep獲取以下數據

[英]How to use map and grep in Perl for following data

如何僅顯示以分號結尾的鏈(例如A, C, E, G;

數據

COMPND    MOL_ID: 1;                                                            
COMPND   2 MOLECULE: JACALIN;                                                   
COMPND   3 CHAIN: A, C, E, G;                                                   
COMPND   4 SYNONYM: JACKFRUIT 
AGGLUTININ;                                       
COMPND   5 MOL_ID: 2;                                                           
COMPND   6 MOLECULE: JACALIN;                                                   
COMPND   7 CHAIN: B, D, F, H;                                                   
COMPND   8 SYNONYM: JACKFRUIT AGGLUTININ  

我嘗試了以下代碼

#!usr/local/bin/perl

open(FILE, "/home/httpd/cgi-bin/r/1JAC.pdb");

while ( $line = <FILE> ) {

    if ( $line =~ /^COMPND/ ) {

        #$line = substr $line,4,21;

        my $line =~ m(/\$:^\w+\$\;/g);
        print $line;
    }
}
perl -nle'print $1 if /^COMPND\s+\S*\s*CHAIN:(.+);/' /home/httpd/cgi-bin/r/1JAC.pdb

這是將行的一部分“抓”到標准輸出的相當簡單的方法。 它將捕獲括號中的所有內容並將其打印出來。

  • -n使用while(<>)循環從文件中讀取數據
  • -l處理換行符

您可以使用單個正則表達式,如下所示:

while (my $line = <FILE>) {
    if ($line =~ /^COMPND.+?CHAIN:\s*(.*?)\s*;\s*$/) {
        my $chain = $1;
        print "$chain\n";
    }
}

這使用正則表達式來匹配COMPND,CHAIN和結尾; 正則表達式末尾的\\s*將匹配任何尾隨空格。 它將捕獲CHAIN:;之間的字符串; 不包括設置為$chain變量值的$1尾部和前導空格。

有關Perldoc的更多信息:Perlre-Perl正則表達式

您可能喜歡這種單線解決方案

perl -le 'print for map /CHAIN:\s*([^;]+)/, <>' /home/httpd/cgi-bin/r/1JAC.pdb

輸出

A, C, E, G
B, D, F, H

將GNU grep與perl正則表達式一起使用:在“ CHAIN:”和分號之間找到文本

$ grep -oP '(?<=CHAIN: ).*?(?=;)' filename
A, C, E, G
B, D, F, H

嘗試這個

use warnings;
use strict;
open my $nis,"<1jac.pdb";
my @ar = grep{ m/^COMPND/g} <$nis>;
my $s = join("",@ar);
my @dav;
my @mp2  = map{split(/,\s|,/, $_)} grep{ s/(COMPND\s+\d+\s+(CHAIN\:\s+)?)|(\n|;)//g} @dav= $s =~m/(COMPND\s+\d+\s+CHAIN\:.+?(?:.|\n)+?\;)/g;
$, = ", ";
print @mp2;

輸出量

A, C, E, G, B, D, F, H

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM