我必须处理格式为 10-20GB 的文本文件:
字段 1 字段 2 字段 3 字段 4 字段 5
我想将 field2 每一行的数据解析成几个文件之一;被插入的文件由 field4 中的值逐行确定。 field2 中有 25 个不同的可能值,因此数据可以解析为 25 个不同的文件。
我尝试过使用 Perl(慢)和 awk(更快但仍然很慢) - 有没有人对替代方法有任何建议或指示?
仅供引用,这是我尝试使用的 awk 代码;请注意,我不得不恢复处理大文件 25 次,因为我无法在 awk 中同时打开 25 个文件:
chromosomes=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25)
for chr in ${chromosomes[@]}
do
awk < my_in_file_here -v pat="$chr" '{if ($4 == pat) for (i = $2; i <= $2+52; i++) print i}' >> my_out_file_"$chr".query
done
最佳答案
使用 Perl,在初始化期间打开文件,然后将每一行的输出与适当的文件匹配:
#! /usr/bin/perl
use warnings;
use strict;
my @values = (1..25);
my %fh;
foreach my $chr (@values) {
my $path = "my_out_file_$chr.query";
open my $fh, ">", $path
or die "$0: open $path: $!";
$fh{$chr} = $fh;
}
while (<>) {
chomp;
my($a,$b,$c,$d,$e) = split " ", $_, 5;
print { $fh{$d} } "$_\n"
for $b .. $b+52;
}
关于perl - 如何快速解析大(> 10GB)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1919026/