我的perl脚本出现问题。我有一个4列的input.txt文件,我想从第二列的每一行中减去100,并在第三列的每一行中加100,并将输出打印到一个单独的文件。我可以获得值OK但它只打印一列中的所有值。
input.txt:
chr1 878656 878657 MACS_peak_1
chr1 912350 912351 MACS_peak_2
chr1 1624598 1624599 MACS_peak_3
chr1 1677888 1677889 MACS_peak_4
我想从第二列中减去100并将第100列添加到第三列,所以它看起来像这样:
chr1 878556 878757
chr1 912250 912451
chr1 1624498 1624699
chr1 1677788 1677989
我一直在使用以下脚本。算术没问题,但每次我将它打印到屏幕上时,我只得到一列数据输出。
use warnings;
unless (open(FILE, "input.txt")){
print "cannot open file\n\n" ;
exit;
}
while (<FILE>) {
chomp($_);
{
@input = split(/\t/,$_);
@input1= split(/\t/,$input[1]);
@input2= split(/\t/,$input[2]);
$input1 = $input[1] - 100;
$input2 = $input[2] + 100;
{
print $input1,"\n"; print $input2,"\n";
}
}
}
close FILE ;
我知道如何用awk做这件事,但我正在努力学习perl这么新。非常感谢任何建议和解释。
谢谢, 哈丽特
答案 0 :(得分:2)
use warnings;
use strict;
open my $input, '<', 'in.txt';
while(<$input>){
my @split = split(/\s+/);
my $col1 = ($split[1] - 100);
my $col2 = ($split[2] + 100);
print "$split[0]\t$col1\t$col2\n"
}
打印:
chr1 878556 878757
chr1 912250 912451
chr1 1624498 1624699
chr1 1677788 1677989
答案 1 :(得分:2)
既然您正在学习Perl,请查看此单行,看看您是否能理解其工作原理:)
$ perl -lane '$F[1] -= 100; $F[2] += 100; print "@F[0,1,2]"' input.txt
perldoc perlrun
应该可以帮助您解读它。