0

我有一个巨大的排序文本文件(1000 万行)。我想将其拆分为每个大小约为 10,000 个的小文件。但是不应该有任何文件的最后一行与任何其他文件的第一行具有相同的第一个字段。换句话说,分割点应该在第 10k 行附近,但是分割前的行的第一个字段应该与之后的行不同。

我想到了一个乏味的方法。在另一个文件中,以某种方式打印所有可能的拆分位置,其中 lineN 和 lineN+1 具有不同的第一个字段。然后编写程序仅选择那些接近 10k 的分割点。但现在我不能使用该split命令,因为它只允许每个拆分文件的固定行。

如何解决问题?

4

2 回答 2

1

像这样,未经测试,应该这样做:

awk '
nr == 10000 { got10k = 1 }
got10k && ($1 != prev) { nr = 0 }
++nr == 1 { fileName = "outfile" ++numFiles; got10k = 0 }
{ print > fileName; prev = $1 }
' file
于 2013-10-06T12:24:55.053 回答
0

您可以使用该awk命令编写一个小脚本来将数据写入不同的文件。

使用awk for循环,您可以检查两个字段是否与前一行的字段匹配,然后继续写入同一个文件(在读/写 10k 行之后),否则写入一个新文件。

于 2013-10-05T16:57:26.607 回答