Dear friends, I have written a perl script to get seprated files, but finally I every file included multiple files appeared before, for example, 1 file 2M, 2 file 5 M( included last one), 3 file 6 M (included last two ones), ... but I expected as 1 file 2M, 2 file 3M, 3 file 1 M, ... the script as follows: #! /usr/bin/perl
use strict; use warnings; use Getopt::Long; my ($dir, $files, $file_dir, $file_name, $file_main, $file_format, $outfile); my %hash; GetOptions ('dr=s' =>\$dir); foreach $files (glob("$dir/*.txt")) { ($file_dir, $file_main) = split (/\/\//,$files); ($file_name,$file_format) =split(/\./,$file_main); $outfile= $file_name."_sg.txt"; open OUT,">",$outfile or die "can't open $outfile"; open IN,"<$files" or die "can't read open $files"; while(defined (my $line= <IN>)){ chomp($line); $line =~s/^\s+//g; next if ($line =~ m/^S*$/); my ($id,$start,$end)= (split /\t/,$line)[0,1,2]; # no 3 after "split /\t/,$line" my $m_lenth = $end-$start+1; if (exists $hash{$id}) { my ($start,$end)= (split /\t/,$hash{$id})[1,2]; if ($m_lenth > ($end-$start+1)) { $hash{$id} = $line; } } else { $hash{$id} = $line; } } my @val = values %hash; print OUT "@val\n"; close OUT; close IN; } -- Hunan Normal University, Changsha, China:Dong Liu 格言:积土而为山,积水而为海; 知识在于积累,成功在于勤奋。