根据另一个文件中的列过滤文件中的条目

时间:2014-05-21 11:30:14

标签: perl unix awk filter rows

有没有办法根据另一个文件中的条目过滤文件中的条目? (最好是在unix中)

例如,文件1和2有50个条目(行)和10列。基于最后5列,我只想使用file1中的唯一条目。即条目存在于file1中但不存在于file2中(基于最后5列)。

我尝试过差异,但它似乎只适用于1列条目。

1 个答案:

答案 0 :(得分:1)

这个Perl脚本似乎按照你的要求做了。

它使用每个记录中的最后五个字段作为键从file2构建哈希值,然后对file1执行相同操作,如果file2包含相同的键,则打印记录

use strict;
use warnings;
use autodie;

my %file2;

open my $fh, '<', 'file2.txt';
while (<$fh>) {
  next unless /\S/;
  my @fields = split;
  my @key = @fields[-5..-1];
  ++$file2{"@key"};
}

open $fh, '<', 'file1.txt';
while (<$fh>) {
  if (/\S/) {
    my @fields = split;
    my @key = @fields[-5..-1];
    print unless $file2{"@key"};
  }
  else {
    print;
  }
}

close $fh;