ฉันกำลังพยายามเปรียบเทียบแต่ละองค์ประกอบของคอลัมน์ 1 จากรายการหนึ่ง (screens.txt) กับองค์ประกอบใดๆ ของคอลัมน์ 1 จากอีกรายการ (new_list.txt) และหากตรงกัน ให้พิมพ์ทั้งแถวของรายการ (screens.txt) ในไฟล์ข้อความแยกต่างหาก (matched.txt) ฉันจัดการเพื่อเลือกคอลัมน์ที่ถูกต้อง แต่ผลลัพธ์ที่ฉันได้รับคือแถวจากรายการ (new_list.txt) แทนที่จะเป็นรายการ (screens.txt) และมีการเข้าชมเพียงครั้งเดียว พบดังนั้นดูเหมือนว่าจะมีปัญหากับการวนซ้ำด้วย
new_list.txt รูปแบบ => first_column->double_tab->the_rest
ฉันยังใหม่มากในการเขียนโปรแกรม Perl ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก!
นี่คือสิ่งที่ฉันได้ทำไปแล้ว:
#!usr/bin/perl
use warnings;
$list = "new_list.txt";
$screens = "screens.txt";
$result = "matched.txt";
open (FA, "<$list") or die "Can't read source file $list: $!\n";
open (RES, ">$result") or die "Can't write on file $result: $!\n";
$n = 0;
$column = 10;
while ($line = <FA>) {
@description = split (' ', $line);
@ID = split ('\\t', $description[0]);
#print just first column from the list
# print "$ID[0]\n";
}
close (FA);
open (FA, "$screens") or die "Can't read source file $screens: $!\n";
while ($file = <FA>) {
@table = split (' ', $file);
@accession_no = split ('\ ', $table[0]);
# print the first column from the list
# print "$accession_no[0]\n";
}
open (FA, "<$list") or die "Can't read source file $list: $!\n";
while ($line = <FA>) {
print "$line\n";
@description = split (' ', $line);
@ID = split ('\\t', $description[0]);
if ($accession_no eq $ID[0]) {
$n = $n+1;
for ($i = 0; $i < $column; $i++) {
print RES "$file";
}
print "\n";
}
}
close (FA);
close (RES);
print "Hits found: $n\n";
นี่คือตัวอย่างของ next_list.txt: Q9UKA8 RCAN3_HUMAN 0
Q9UKA8-2 RCAN3_HUMAN 0
Q9UKA8-3 RCAN3_HUMAN 0
Q9UKA8-4 RCAN3_HUMAN 0
Q9UKA8-5 RCAN3_HUMAN 0
Q9GZP0 PDGFD_HUMAN 0
นี่คือไฟล์อินพุตจาก screens.txt:
Q9GZP0 GDLDLASEST ปัจจัยแนบนั่งร้าน B2 (SAF-B2) SAFB2
Q9UKA8-5 QKAFNSSSFN Ran โปรตีนกระตุ้นการทำงานของ GTPase 1 (RanGAP1) RANGAP1
ฉันสนใจที่จะตรวจสอบว่า Q9GZP0 และ Q9UKA8-5 (คอลัมน์แรก)
จาก screens.txt อยู่ในคอลัมน์แรกของ new_list.txt และหากพวกเขา
จากนั้นจะพิมพ์ทั้งบรรทัด/แถวจาก screens.txt
ขอบคุณล่วงหน้า!