我在Linux系统上有一个大约10GB的文件。它包含20,000,000个二进制记录,但每个记录由ASCII分隔符“$”分隔。我想使用split命令或其中某些组合将文件分块为较小的部分。理想情况下,我可以指定命令应该将每1,000条记录(因此每1,000个分隔符)拆分为单独的文件。任何人都可以帮忙吗?
答案 0 :(得分:5)
问题唯一不正统的部分似乎是记录分隔符。我确信这在awk中很简单 - 但我碰巧讨厌awk
。
我会先将它转移到'正常'问题的范围内:
tr '$' '\n' < large_records.txt | split -l 1000
默认情况下会创建xaa
,xab
,xac
...文件;查看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