我有两个文件“1.txt”和“2.txt”。
两个文件的结构是:
Main_File1 Start End
1 200 250
2 310 340
Main_File2 Start End
1 200 250
2 350 370
我想写一个perl代码,其输出应该是两个文件,即一个文件具有常见的“开始”和“结束”位置列表,另一个文件具有唯一的“开始”和“结束”位置。
答案 0 :(得分:1)
我猜你已经拥有了阅读这些文件的代码,只需要解析这些值并组织它们。
设计部分提出了一个对每个开始,结束对都是唯一的键,但不难使用。由于开头和结尾都是数字,这应该很简单:
our %matchups ;
sub process
{
my ($lst_)= @_ ;
for ( @$lst_ ) {
my ($strt,$endn)= /\d+\w+(\d+)\w+(\d+)/ ;
next unless $strt && $endn ;
my $key= "${strt}_$endn" ;
$matchups{$key}[0]= $_ ;
$matchups{$key}[1] ++ ;
}
}
sub outputmatch
{
my ($dest,$multi)= @_ ;
# open file
for ( values %matchups ) {
print $OUT $_->[0] if ( $_->[1] > 1 ) == $multi ;
}
}
{
process(@listfrom1txt) ;
process(@listfrom2txt) ;
outputmatch( "common.txt", 1 ) ;
outputmatch( "uniq.txt", 0 ) ;
}
所以在这里我们创建一个start_end
的密钥,然后在哈希内部构建一个数据结构,这是一个包含两个元素的数组。第一个元素是原始行,第二个元素是我们看到此条目的次数。
如果某一行是唯一的,则计数将为1
;如果不是,那么它将大于1
。