我正在尝试从myu数据中读取一些特定的列到我的输出文件中,我一次成功读取一个cloumn但我想要一次读取一些我感兴趣的列(我有列的列表i)想要在一个单独的tex文件中提取)因为提取单个列并加入它们使一个单独的文件对我来说会变得忙乱,这里是我尝试提取单个coulmn的代码,
#!/usr/bin/perl
use strict;
use warnings;
open (DATA, "<file.txt") or die ("Unable to open file");
my $search_string = "IADC512444";
my $header = <DATA>;
my @header_titles = split /\t/, $header;
my $extract_col = 0;
for my $header_line (@header_titles) {
last if $header_line =~ m/$search_string/;
$extract_col++;
}
print "Extracting column $extract_col\n";
while ( my $row = <DATA> ) {
last unless $row =~ /\S/;
chomp $row;
my @cells = split /\t/, $row;
print "$cells[$extract_col] ";
}
有没有可能一次提取所有列,而不是只有IADC512444我想从我的文本文件到outfile到我的硬盘?请帮我解决这个问题, 感谢
答案 0 :(得分:2)
如果需要将内容打印到磁盘上的文件,则应该以写入模式打开文件并写入文件。此外,如果您想要更多列,可以通过访问数组单元格中的相应元素来实现。在此示例中,我正在打印您正在打印的列以及第1列和第2列
open(OUT_FILE,">path_to_out_file") || die "cant open file...";
while ( my $row = <DATA> ) {
last unless $row =~ /\S/;
chomp $row;
my @cells = split /\t/, $row;
#print "$cells[$extract_col] ";
print OUT_FILE "$cells[$extract_col],$cells[1],$cells[2]\n";
}
close(OUT_FILE)
我已经稍微调整了一下代码以满足您的要求。 在变量req_hdr_string中,您应该说出您需要的列名, 因此它将被拆分并存储在哈希中。 然后从标题我得到列的位置,只打印那些
#!/usr/bin/perl
use strict;
use warnings;
open (DATA, "<h11.txt") or die ("Unable to open file");
my $req_hdr_string = "abc,ghi,mno,";
my %req_hdrs = ();
my %extract_col = ();
foreach(split /,/, $req_hdr_string)
{
print "req hdr is:$_\n";
$req_hdrs{$_} = $_;
}
my $index = 0;
my $header = <DATA>;
chomp $header;
foreach (split /\t/, $header)
{
print "input is:|$_|\n";
if(exists $req_hdrs{$_})
{
print "\treq index is:$index\n";
$extract_col{$index} = 1;
}
$index++;
}
open(OUT_FILE,">out_file") || die "cant open file...";
while ( my $row = <DATA> )
{
last unless $row =~ /\S/;
chomp $row;
my @cells = split /\t/, $row;
foreach $index (sort keys%extract_col)
{
print OUT_FILE "$cells[$index],";
}
print OUT_FILE "\n";
}
close(OUT_FILE);
close(DATA);