我在網站周圍搜索,出乎意料地我似乎找不到可以工作的東西爲我的特殊問題。所以我想我會發布它,看看你們中有些更有經驗的程序員如何解決問題。在一個文件/數組中,搜索散列鍵,並用散列值替換它,對所有散列鍵/值執行此操作。
我有一個文本文件,電子表格(多行與製表符分隔列),我想通過某些標籤(例如scaffold1253.1_size81005.6.32799_7496)進行搜索,並用更簡單的標籤(例如scaffold1253替換它們。 1a)中。這些標籤僅位於文本文件的第一列。我已經編寫了這個腳本,以便將舊標籤的散列作爲與新標籤對應的鍵作爲其各自的值。這個散列有大約26000行。所以基本上我想將散列鍵1乘1,在文本文件中搜索它們,並用它們各自的散列值替換它們。
我有一個相當不錯的服務器可用,所以如果它太複雜,使其第一列專門加快過程,那就沒關係。
這是我到目前爲止有:
use warnings;
$gtf = './Hc_genome/Hc_rztk_1+2+8+9.augustus.gtf';
open(FASTAFILE2, $gtf);
@gtfarray = <FASTAFILE2>;
#print @gtfarray;
my %hash;
while (<>)
{
chomp;
my ($key, $val) = split /\t/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
#print %hash;
while (my ($find, $replace) = each %hash) {
foreach (@gtfarray){
$_ =~ s/$find/$replace/g;
push @newgtf, $_;
}
}
print @newgtf;
此代碼似乎並不工作,因爲它沒有完成。我很確定這是foreach循環結構的問題。對不起,我不知道有任何其他方式來做到這一點。有沒有人有更好的方式來運行這個文件並進行更換?
任何輸入將不勝感激! 謝謝,
安德魯
@DVK
這裏是您的MODS的完整的腳本,以你的while循環,任何想法,爲什麼它不接受它運行到語法錯誤?再次感謝!
use warnings;
$gtf = './Hc_genome/Hc_rztk_1+2+8+9.augustus.gtf';
open(FASTAFILE2, $gtf);
my %hash;
while (<>){
chomp;
my ($key, $val) = split /\t/;
$hash{$key} .= exists $hash{$key} ? ",$val" : $val;
}
while $line (<FASTAFILE2>){
my @fields = split(/\t/, $line);
# If you only care about first column, don't need the foreach loop below;
# just do the loop insides on $fields[0]
foreach my $field (@fields) {
$field = $hash{$field} if exists $hash{$field};
print $outfile "$field\t"; # Small bug - will print training \t
}
print $outfile "\n"
}
__END__
下面是語法錯誤: 的perl在gtf_mod2.pl線14 gtf_mod2.pl < ./Hc_genome/header_file.txt 語法錯誤,接近 「而$線」 在gtf_mod2.pl線 語法錯誤23,在「}」 附近執行gtf_mod2.pl由於編譯錯誤而中止。
你必須把''一樣,而(我的$線=)' –