过滤文本文件之间的常见值

时间:2012-01-17 10:53:43

标签: perl

我是perl的初学者,我正在尝试使用1列ID名称来过滤大型文本文件,每个ID名称长且独特,例如:

Aghm
Tbc2
Popc
Ltr1
Iubr
Osv5

并针对具有一些相同ID名称的第二个文本文件过滤此列表,例如:

Popc
Iubr
Trv7
Ybd8

我只想找到常用的ID名称并打印到新的文本文件中。在上面的例子中,我想生成列表:

Popc
Iubr

如何使用perl脚本执行此操作?

2 个答案:

答案 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