【问题标题】:Filter entries in a file based on columns in another file根据另一个文件中的列过滤文件中的条目
【发布时间】:2014-05-21 20:06:02
【问题描述】:

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

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

我尝试了 diff,但它似乎只适用于 1 列条目。

【问题讨论】:

  • 例如,grepawk 很可能是可能的。为此,我们需要一些样本输入和所需的输出。

标签: perl unix awk filter rows


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多