私はperlの完全なアマチュアです。検索を実行できるように、SAMファイルの参照名を変更するために適用しようとしている検索と置換の機能について質問したいと思います。ファイルは非常に大きく(5〜17ギガ)、プログラミング言語を使用せずにテキストエディターで開いて、一致を実行できます。
基本的に、perlは「gi | 149288852 | ref | NC_000067.5 | NC_000067」などの文字列全体に一致し、全体を「chr1」のみに置き換えたいと思います。
ただし、これまでのところ、「chr1 | chr1 | chr1 | chr1|chr1」または「gi|chr1 | ref | NC000067.g|NC_000067」に置き換えることしかできないようです。
誰かが私を助けることができますか?
編集:
私はいくつかの異なることを試しましたが、私がやろうとしているのは、上司が誰かから受け取ったプログラムを変更して、これを正しく行うことです。以下に投稿します。
#!/usr/bin/perl
use strict;
use warnings;
my %Chr = (
"gi|149288852|ref|NC_000067.5|NC_000067" => "chr1",
"gi|149288869|ref|NC_000076.5|NC_000076" => "chr10",
"gi|149288871|ref|NC_000077.5|NC_000077" => "chr11",
"gi|149292731|ref|NC_000078.5|NC_000078" => "chr12",
"gi|149292733|ref|NC_000079.5|NC_000079" => "chr13",
"gi|149292735|ref|NC_000080.5|NC_000080" => "chr14",
"gi|149301884|ref|NC_000081.5|NC_000081" => "chr15",
"gi|149304713|ref|NC_000082.5|NC_000082" => "chr16",
"gi|149313536|ref|NC_000083.5|NC_000083" => "chr17",
"gi|149321426|ref|NC_000084.5|NC_000084" => "chr18",
"gi|149323268|ref|NC_000085.5|NC_000085" => "chr19",
"gi|149338249|ref|NC_000068.6|NC_000068" => "chr2",
"gi|149352351|ref|NC_000069.5|NC_000069" => "chr3",
"gi|149354223|ref|NC_000070.5|NC_000070" => "chr4",
"gi|149354224|ref|NC_000071.5|NC_000071" => "chr5",
"gi|149361431|ref|NC_000072.5|NC_000072" => "chr6",
"gi|149361432|ref|NC_000073.5|NC_000073" => "chr7",
"gi|149361523|ref|NC_000074.5|NC_000074" => "chr8",
"gi|149361524|ref|NC_000075.5|NC_000075" => "chr9",
"gi|149361525|ref|NC_000086.6|NC_000086" => "chrX",
"gi|149361526|ref|NC_000087.6|NC_000087" => "chrY",
);
my $usage = "\n\n\tUsage: convert.pl <SAM file>\n\nThis script converts NCBI ref#s to chr #s\n\n";
die $usage unless ( @ARGV == 1);
my $file = $ARGV[0];
open (IN, "$file") or die "Can't open file: $file\n";
while (<IN>){
if (/\S+\s+\d+\s+(gi\S+)/){
my $tag = $1;
if (exists $Chr{$tag}){
my $line = $_;
$line =~ s/'$tag'/$Chr{$tag}/;
print $line;
}
else {
die "\n\n\nHash value doesn't exist for $tag $_\n\n";
}
}
else {
print $_;
}
}
これは、「gi | chr1 | ref | NC000067.g|NC_000067」で出力されます。
私もこれを試しました:
perl -pi -w -e 's/gi|149288852|ref|NC_000067.5|NC_000067/chr1/g;' *.sam
一つずつできるかどうか見てみますが、それは「chr1 | ch1 | chr1 | chr1|chr1」で出てきます