如何使用Perl整理和汇总文件中的记录?

1 unix perl awk sed

我有一个以下格式的文本文件:

211B1 CUSTOMER|UPDATE|  
211B2 CUSTOMER|UPDATE|  
211B3 CUSTOMER|UPDATE|  
211B4 CUSTOMER|UPDATE|  
211B5 CUSTOMER|UPDATE|  
567FR CUSTOMER|DELETE|  
647GI CUSTOMER|DELETE|  
Run Code Online (Sandbox Code Playgroud)

我想要一个处理文本文件的脚本并报告以下内容:

  • 为客户找到的CUSTOMER栏目的"更新":211B1,211B2,211B3,211B4,211B5
  • 找到Acct's的CUSTOMER列的"DELETE":5675FR,6470GI

我可以编写简单的解决方案,但这对我来说似乎有点复杂,并希望得到帮助或指导.

j_r*_*ker 6

collat​​e.pl

#!/usr/bin/perl

use strict;

my %actions;
while (<>) {
    my ($key, $fld, $action) = /^(\w+) (.+?)\|(.+?)\|/ or die "Failed on line $.!";
    push @{$actions{$action}{$fld}}, $key;
}

foreach my $action (keys %actions) {
    foreach my $fld (keys %{$actions{$action}}) {
        print "\"$action\" for column $fld found for Acct's: " . join(",", @{$actions{$action}{$fld}}), "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

使用如下:

perl collate.pl < input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)