在分隔符上拆分文件

时间:2011-06-01 11:43:23

标签: linux awk split

我在Linux系统上有一个大约10GB的文件。它包含20,000,000个二进制记录,但每个记录由ASCII分隔符“$”分隔。我想使用split命令或其中某些组合将文件分块为较小的部分。理想情况下,我可以指定命令应该将每1,000条记录(因此每1,000个分隔符)拆分为单独的文件。任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

问题唯一不正统的部分似乎是记录分隔符。我确信这在awk中很简单 - 但我碰巧讨厌awk

我会先将它转移到'正常'问题的范围内:

tr '$' '\n' < large_records.txt | split -l 1000

默认情况下会创建xaaxabxac ...文件;查看man split了解更多选项

答案 1 :(得分:2)

我爱awk:)

BEGIN { RS="$"; chunk=1; count=0; size=1000 }
{
   print $0 > "/tmp/chunk" chunk; 
   if (++count>=size) {
      chunk++;
      count=0;
   }
}

(请注意,awk中的重定向运算符仅在第一次调用时截断/创建文件 - 后续引用被视为追加操作 - 与shell重定向不同)

答案 2 :(得分:1)

默认情况下,一旦达到默认后缀限制为2的最大阈值,unix拆分将耗尽后缀。更多信息:https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html