awk拆分大文件会产生错误“打开文件过多”

时间:2015-09-28 07:20:26

标签: bash awk data-processing data-partitioning

我有一个bash脚本用于分割一个巨大的输入文件 - 目前它是400MB,之后脚本应该分割一个4GB的文件。

核心或此处理是以下awk脚本:

INPUTFILE="FA.txt"

awk -F $'\t' 'BEGIN{
    count = 1;
    vcount = 1;
    hcount = 1;
    tmp = 0;
    while (getline "'"$INPUTFILE"'")
    {
        FAv[count] = $1;
        FAh[count] = FAv[count];
        BK[count] = $2;
        vBreak[count] = $3;
        Count++;
    }
    close("'"$INPUTFILE"'");
}

{
    str1 = sprintf("%s%s%s",FAv[vcount],"v",".txt");
    str2 = sprintf("%s%s%s",FAh[hcount],"h",".txt");
    if (NR > (vBreak[vcount+1]-1))
    {
        close(str1);
        vcount ++;
    }
    if (($22-tmp) > BK[hcount])
    {
        close(str2);
        tmp = BK[hcount];
        hcount++;
    }
    printf "...\n",(many columns) >> str1;
    printf "...\n",(many columns) >> str2;
}' Data.txt

Data.txt是一个非常大的制表符分隔表,有大约40列和大约260万行;脚本稍后应该处理的文件将有大约3000万行。我现在使用的输入文件应该可以生成大约300个文件,脚本稍后要处理的文件应该创建大约4000个文件。

close(str1);close(str2);不会更改我收到的错误消息

awk: (filename)h.txt makes too many open files
Input record number 157762, file Data.txt
source line number 7
awk: (filename)h.txt make too many open files
Input record number 157762, file Data.txt
source line number 10

给出的源代码行数在这里的给定代码段中相当于它们,在我的脚本中它们位于不同的位置。

用于生成拆分条件的文件“FA.txt”大3KB,有155行和3列,所以这对awk完全没有任何问题。 由于数据来自我正在为之工作的公司,我恐怕无法真正提供虚拟数据。

我没有看到代码中的问题所在,任何帮助都会非常感激。

0 个答案:

没有答案