我有{3}的.txt
个文件。我想比较第一列和第二列,如果第一列中的值出现在第二列中,我想删除第二列和第三列中的该条目(不应修改第一列)。结果应存储在新文件中。
示例输入:
Col 1 Col 2 Col 3
VIBHAR_02293_1 VIBHAR_00819_2 tatatattattata
VIBHAR_00819_2 VIBHAR_00819_4 tattavgaggagag
VIBHAR_00705_3 VIBHAR_00705_7 attaggaccaggat
VIBHAR_00819_4 VIBHAR_02153_9 ccagggattattat
示例输出:
VIBHAR_02293_1 VIBHAR_00705_7 attaggaccaggat
VIBHAR_00819_2 VIBHAR_02153_9 ccagggattattat
VIBHAR_00705_3
VIBHAR_00819_4
我尝试使用以下代码,但它不起作用:
while($line=(<File>))
{
chomp($line);
@F=split('\t',$line);
$hash{$F[1]}=$F[2];
if ($F[0] eq $F[1])
{
# print "$line\n";
delete($hash{keys});
}
}
如果我上面发布的列的格式不好,那么我猜的只是我的问题。
答案 0 :(得分:0)
#!/usr/bin/perl
use warnings;
use strict;
my %H;
while (<>) {
chomp;
my @F = split /\t/;
$H{$F[0]} = [$., $F[1], $F[2]];
}
my @col1;
my @col23;
for my $col1 (sort { $H{$a}[0] <=> $H{$b}[0] } keys %H) {
push @col1, $col1;
next if exists $H{ $H{$col1}[1] };
push @col23, [@{ $H{$col1} }[1,2]];
}
for my $i (0 .. $#col1) {
print $col1[$i];
print "\t", join "\t", @{ $col23[$i] } if $i < @col23;
print "\n";
}
你真的想“向上移动”第2列和第3列中的值吗?