我是perl的初学者,我正在尝试使用1列ID名称来过滤大型文本文件,每个ID名称长且独特,例如:
Aghm
Tbc2
Popc
Ltr1
Iubr
Osv5
并针对具有一些相同ID名称的第二个文本文件过滤此列表,例如:
Popc
Iubr
Trv7
Ybd8
我只想找到常用的ID名称并打印到新的文本文件中。在上面的例子中,我想生成列表:
Popc
Iubr
如何使用perl脚本执行此操作?
答案 0 :(得分:1)
为了让您走上路径,您似乎制作了Perl 过滤器。
您可以尝试打开第一个文件,循环菱形操作符(即<>
)并将选定的行写入第二个文件。
您应该尝试获取Perl Cookbook的副本,chapter 07正在处理此类案例。
答案 1 :(得分:1)
拥有ID文件ids.txt
,过滤文件filter_ids.txt
,这会将所需结果写入filtered_ids.txt
:
#!/usr/bin/perl
use strict;
use warnings;
open my $rh, '<', 'filter_ids.txt' or die "$!\n";
my %filter = map {$_ => 1} <$rh>;
open $rh, '<', 'ids.txt' or die "$!\n";
open my $wh, '>', 'filtered_ids.txt' or die "$!\n";
map {print $wh $_} grep $filter{$_}, <$rh>;
close $wh;
就个人而言,我宁愿用grep
:
grep -f filter_ids.txt ids.txt > filtered_ids.txt
两种情况都有结果:
flesk@flesk:~$ more filtered_ids.txt
Popc
Iubr