gpt4 book ai didi

regex - 如何删除冗余字段并合并结果行

转载 作者:行者123 更新时间:2023-12-01 10:12:32 24 4
gpt4 key购买 nike

我正在尝试处理纯文本文件。它基本上是名称和相关数字字段的索引,格式如下:

Nowosielski, Matthew, 484, 584, 777
Nowosielski, Matthew, 1151
Nunes, Paulino, 116
Nussbaum, Mike, 1221, 444,
Nussbaum, Mike, 156

我想处理成这个

Nowosielski, Matthew, 484, 584, 777, 1151
Nunes, Paulino, 116
Nussbaum, Mike, 156, 444, 1221

如您所见,行的结尾并不一致:有些可能是空格,有些是换行符,有些是逗号。实际上,我需要合并以重复的全名开头的行,丢弃多余的名称条目,同时合并并保留数字字段的数字顺序。

我的直觉告诉我要么学习一些快速的 perl 要么学习 awk,但我的技能组合对于这两者来说都是空的。我调查了两者,经过一些搜索和阅读后未能找到解决方案的清晰路径。

因此,我的问题是:什么是我可以有效学习并足以完成这项任务的工作的最佳工具?另外,鉴于建议的工具,是否有关于如何解决问题的建议?

当然,我可以手动编辑这个文件,但这不是很有趣,而且似乎是一种非常愚蠢、鲁莽的解决问题的方法。我以这个任务为借口来学习一些关于文本处理的知识,因为它感觉像是一个问题,可能有一个很好的现有工具来解决。

有什么建议吗?

最佳答案

正如 Brian 所说,使用哈希表。下面删除换行符,用逗号分隔每条记录,使用“姓氏,名字”原始形式作为散列键,将剩余值插入数组并使用对所述数组的引用作为上述键的值.

然后它只是迭代散列中的键/值对并相应地格式化。

修改后的解决方案 - 排序数字、省略中间名和排序输出

#!/usr/bin/env perl
use strict;
use warnings;

my %merged;

while (my $record = <DATA>) {
chomp $record;
my ($lname, $fname, @stuff) = split /[, ]+/, $record;
push @{ $merged{"$lname, $fname"} }, grep { m/^\d+$/; } @stuff;
}

foreach my $name (sort keys %merged) {
print $name, ", ", join( ', ', sort { $a <=> $b } @{$merged{$name}}), "\n";
}

__DATA__
Nowosielski, Matthew, 484, 584, 777
Nowosielski, Matthew, 1151
Nunes, Paulino, 116
Nussbaum, Mike, 1221, 444,
Nussbaum, Mike, 156
Nowosielski, Matthew, Kimball, 485, 684, 277

修改后的输出

Nowosielski, Matthew, 277, 484, 485, 584, 684, 777, 1151
Nunes, Paulino, 116
Nussbaum, Mike, 156, 444, 1221

原解

#!/usr/bin/env perl
use strict;
use warnings;

my %merged;

while (my $record = <DATA>) {
chomp $record;
my ($lname, $fname, @stuff) = split /,/, $record;

push @{ $merged{"$lname, $fname"} }, @stuff;
}

while (my ($name, $stuff) = each %merged) {
print $name, join( ',', @$stuff), "\n";
}

__DATA__
Nowosielski, Matthew, 484, 584, 777
Nowosielski, Matthew, 1151
Nunes, Paulino, 116
Nussbaum, Mike, 1221, 444,
Nussbaum, Mike, 156

关于regex - 如何删除冗余字段并合并结果行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com