首页 文章

尝试根据每条记录的内容将一个非常大的文件拆分成多个较小的文件(perl / linux)

提问于
浏览
0

这是问题所在 .

我有20个非常大的文件,每个大约10gb,我需要将每个批量文件拆分为A)记录中的标准和B)它是什么类型的批量文件 .

例 .

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

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

XJOHN 1234567   LOREMIPSUMBLABLABLA789

我需要从文件中将此记录输出到名为 JOHN.DOCTOR.7 的文件中

John是人名,7是数字序列中的最后一位,DOCTOR是文件类型 . 我需要这样做才能解决文件大小问题 . 目前,我正在使用perl逐行读取批量文件,并将记录打印到相应的输出文件中 . 我正在为每条记录打开一个新的处理程序,以避免多个线程写入同一个处理程序并导致数据错误 . 我确实有程序线程,每个批量文件一个线程 . 我无法安装任何第三方应用程序,假设我只有RedHat Linux的标准 . 我正在寻找一种Linux命令,它可以更有效地执行此操作,也可能是perl提供的更好的方法 .

谢谢!

1 回答

  • 1

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

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

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

相关问题