我有大的製表符分隔的文件,如下面的例子:如何優化獨特行的搜索?
scaffold1443 182629 182998 chr1.1.1.241051.241420 367 99.80
scaffold1443 131948 132412 chr1.1.2.291778.292242 462 99.80
scaffold1443 96142 96474 chr1.1.3.327471.327803 330 99.70
scaffold1443 53153 53479 chr1.1.4.370342.370668 322 99.40
scaffold526 2870014 2870523 chr1.1.5.488372.488881 507 99.90
scaffold526 2865956 2866314 chr1.1.6.490869.491234 357 98.10
scaffold526 2867666 2868024 chr1.1.6.490869.491234 357 98.10
scaffold526 2485557 2485867 chr1.1.7.610677.610987 310 100.00
我想在一個新的文件只有行的第4列是唯一的打印。 在前面的示例中,除了第4列中包含「chr1.1.6.490869.491234」的兩行外,應打印所有行。
我編寫的以下腳本(它是較大管道的一部分)完成這項工作,但速度非常慢,尤其是當輸入文件非常大時。
#!/usr/bin/perl
use strict;
use warnings;
#This script takes the best hits output and finds the unique elements that up to only one scaffold.
my $target = $ARGV[0];
my $chromosome = $ARGV[1];
my @mykeys = `cat OUTPUT_$target/psl_score_byname_$target/$chromosome.table| awk '{print \$4}'| sort -u`;
foreach (@mykeys)
{
my $key = $_;
chomp($key);
my $command = "cat OUTPUT_$target/psl_score_byname_$target/$chromosome.table|grep -w $key";
my @belongs= `$command`;
chomp(@belongs);
my $count = scalar(@belongs);
if ($count == 1)
{
open FILE, ">>OUTPUT_$target/unique_hces_$target/$chromosome.txt" or die $!;
print FILE "@belongs\n";
@belongs =();
}
else {
@belongs =();
}
}
有沒有更智能,更快捷的方法來做到這一點? 非常感謝您提前。
重複拍攝哪個項目有重要嗎? –
因爲您必須掃描整個文件,所以在這裏排序文件似乎並不需要,您可以選擇將第一個或最後一個項目放入一組重複項中。 –
不,在這一點上,我想避免所有的重複。在前面的示例中,我不想保留包含chr1.1.6.490869.491234 – Vasilis