chr1 1 10 el1
chr1 13 20 el2
chr1 50 55 el3
我有这个制表符分隔文件,我想使用perl提取第二和第三列。我怎么能这样做?
我尝试使用文件处理程序读取文件并将其存储在字符串中,然后将字符串转换为数组,但它并没有让我随时随地。
我的尝试是:
while (defined($line=<FILE_HANDLE>)) {
my @tf1;
@tf1 = split(/\t/ , $line);
}
答案 0 :(得分:4)
只需在选项卡上自动分割
# ↓ index starts on 0
$ perl -F'\t' -lane'print join ",", @F[1,2]' inputfile
输出:
1,10
13,20
50,55
请参阅perlrun。
答案 1 :(得分:1)
use strict;
my $input=shift or die "must provide <input_file> as an argument\n";
open(my $in,"<",$input) or die "Cannot open $input for reading: $!";
while(<$in>)
{
my @tf1=split(/\t/,$_);
print "$tf1[1]|$tf1[2]\n"; # $tf1[1] is the second column and $tf1[2] is the third column
}
close($in)
答案 2 :(得分:1)
你有什么问题?你的代码已经完成了所有困难的部分。
while (defined($line=<FILE_HANDLE>)) {
my @tf1;
@tf1 = split(/\t/ , $line);
}
你的@tf1
数组中有三列(顺便说一下 - 你的变量命名需要认真工作!)你现在需要做的就是从数组中打印第二和第三个元素(但请记住Perl数组元素从零开始编号。
print "$tf1[1] / $tf1[2]\n";
利用Perl的默认行为,可以大大简化您的代码。
while (<FILE_HANDLE>) { # Store record in $_
my @tf1 = split(/\t/); # Declare and initialise on one line
# split() works on $_ by default
print "$tf1[1] / $tf1[2]\n";
}
答案 3 :(得分:0)
比@daxim更简洁:作为单线:
perl -aE 'say "@F[1,2]" ' file