使用“awk”根据列名进行文件分割失败

使用“awk”根据列名进行文件分割失败

我试过了:

  1. awk '{if (last != $1) close(last); print > $1; last = $1}' file

  2. awk -F$'\t' '{ print > ($1) }' file

  3. awk '{if (last != $1) close(last); print >> $1; last = $1}' file

将一个非常大的文本文件(33GB)拆分为多个按第一列命名的文件。

对于较小的文件,一切正常,但对于大文件,awk会在列类型末尾附近停止(命令 1 和 2),或者忘记为包含“.”的列输入换行符。在其中(命令 3)。

示例:它在到达类型“10”列的实际末尾之前停止

10      69331427        1
10      69331428        1
10      69331429        1
10      69331430        1
10      69331431        1
10                 

编辑:关闭文件似乎有帮助。 '{print >> $1; close($1)}'

GNU Awk 4.1.4,API:1.1(GNU MPFR 4.0.1,GNU MP 6.1.2)

答案1

到“将一个非常大的文本文件(33GB)拆分为按第一列命名的多个文件。”在任何 UNIX 机器上使用 GNU awk 是这样的:

awk '{print > $1}' file

就这样。如果您遇到问题,那么可能是 awk 命令之外的原因造成的,例如,您的驱动器空间不足,或者您的输入文件可能包含一些奇怪的控制字符。

我不知道你说的awk stops near the end of column type也不是forgets to input newline characters for columns that have "." in them,也不是it just stops before reaching real end of column of type "10"。这可能部分是因为您的问题中没有任何内容表明“列类型”对您意味着什么。

相关内容