Hi, there are two text files as below:
test1.txt
test2.txt is a tab delimited file and I want to check whether col 13 and col 35 of this values (each line) lies between test1.txt columns. I am trying to search as below:
1. I am adding the contents of test1 into a hashname
2. For each line in the second file, I am checking whether col 13 and col 35 lies between (key and value) of hashname
3. I am trying to interrupt once if the status is set to 1 so that I can stop avoiding the whole of hashname.
Is there any better way to do this? This is taking quite a long time. Thanks.
test1.txt
Code:
53015910 53018079 53028477 53039398 53057449 53060200 53062918 53067636 53068725 53070903 53073104 53082405 53157340 53159848 53162114 53164278 53170778 53177010 53186077 53190880
1. I am adding the contents of test1 into a hashname
2. For each line in the second file, I am checking whether col 13 and col 35 lies between (key and value) of hashname
3. I am trying to interrupt once if the status is set to 1 so that I can stop avoiding the whole of hashname.
Code:
#!/usr/bin/perl
$st_status;
$end_status;
#adding contents into a hash
$hashfile = 'test1.txt';
open (LIST1, $hashfile) || die "File not found\n";
while (<LIST1>) {
chomp $_;
@v = split(/\t/, $_);
$hashname{$v[1]} = $v[2];
}
close(LIST1);
#Search in the second file
while(<>) {
$st_status = 0;
$end_status = 0;
chomp $_;
@cols=split(/\t/,$_);
while (($key, $value) = each(%hashname)){
if(($cols[12] >= $key) && ($cols[12] <= $value)) {
$st_status = 1;
last;
}
}
while (($key, $value) = each(%hashname)){
if((cols[34] >= $key) && (cols[34] <= $value)) {
$end_status = 1;
last;
}
}
if (($st_status == 1 ) && ($end_status == 1)) {
print "$_\n";
} else { next; }
}
close FILE;
Comment