0

这是问题所在。

我有 20 个非常大的文件,每个大约 10gb,我需要按照 A)记录中的标准和 B)它是什么类型的大容量文件来拆分每个大容量文件。

例子。

每个批量文件代表一个职业。我们有律师、医生、教师和程序员。这些批量文件中的每一个都包含不同个人的数百万条记录,而不是很多个人,总共 40 个不同的人。

医生档案中的记录可能看起来像

XJOHN 1234567   LOREMIPSUMBLABLABLA789

我需要将文件中的这条记录输出到一个名为JOHN.DOCTOR.7

John 是人名,7 是数字序列中的最后一位,DOCTOR 是文件类型。我需要这样做以限制文件大小。目前,我正在使用 perl 逐行读取批量文件并将记录打印到适当的输出文件中。我正在为每条记录打开一个新的处理程序,以避免多个线程写入同一个处理程序并导致数据畸形。我确实有程序线程,每个批量文件一个线程。我无法安装任何第三方应用程序,假设我只有 RedHat Linux 的标准配置。我正在寻找具有更有效方式的 Linux 命令,或者可能是 perl 提供的更好方式。

谢谢!

4

1 回答 1

1

另一种方法是通过Parallel::ForkManager使用进程而不是线程

此外,我会考虑使用 map/reduce 方法,通过为每个进程/线程提供自己的工作目录,它将在其中编写中间文件,每个医生、律师等一个。

然后我会编写第二个程序,reducer,它可能是一个非常短的 shell 脚本,将中间文件连接到它们各自的最终输出文件中。

于 2013-06-10T19:44:46.320 回答