1

perl スクリプトを使用して txt ファイルを読み込みましたが、パターン マッチングを使用して txt ファイルの各行を perl スクリプトの別の変数に格納する方法を知りたいです。~^>gi を使用して行を一致させることができますが、txt ファイルの両方の行が >gi で表示されます (つまり、1 行目と 3 行目)。また、2 つの別個の DNA シーケンスを異なる変数に読み取りたいと考えています。以下の私の例を考えてみましょう。

file.txt

 >gi102939
 GATCTATC
 >gi123453
 CATCGACA

Perl スクリプト:

#!/usr/local/bin/perl

open (MYFILE, 'file.txt');

@array = <MYFILE>;
($first, $second, $third, $fourth, $fifth) = @array;
chomp $first, $second, $third, $fourth, $fifth;
print "Contents:\n @array";

 if (@array =~ /^>gi/) 
 {  
   print "$first";
 }

close (MYFILE);
4

3 に答える 3

2

入力内で一意であると仮定して>gi..、各キーがシーケンスに関連付けられているハッシュを入力します。

#!/usr/bin/perl    
use warnings;
use strict;
my %hash;
my $last;
while (<DATA>) {
  chomp;
  if (/^>gi/) {
    $last = $_; 
  } else {
    $hash{$last} = $_; 
  }
}
foreach my $k (keys %hash) {
  print "$k => $hash{$k}\n";
}
__DATA__

>gi102939
GATCTATC
>gi123453
CATCGACA
于 2012-08-24T16:49:47.557 に答える
1

常に プログラムの先頭で、最初の使用ポイントで使用して変数を宣言しuse strictてください。これは特に、助けを求めているときに当てはまります。そうすることで、そうしなければ見落とされがちな単純な問題が頻繁に明らかになる可能性があるからです。use warningsmy

現状では、プログラムはファイルを読み込ん@arrayで出力します。テストif (@array =~ /^>gi/) { ... }は配列にスカラー コンテキストを強制するため、配列内の要素数 (おそらく5) を正規表現パターンと比較して失敗します。

正確に何を達成しようとしていますか?ファイルを配列に読み込むと、各行が異なるスカラー変数に入れられます - 変数は配列の要素です

于 2012-08-24T16:53:13.743 に答える
0

このワンライナーはデータベースを読み取り、1 つの要素を抽出します。

perl < file.txt -e '@array=<>;chomp @array;%hash=@array;print $hash{">gi102939"}'

結果:

GATCTATC
于 2012-08-24T16:57:31.867 に答える