小编Sne*_*bat的帖子

使用 awk 每 10,000 行拆分文本文件

我有一个很大的 gzip 文本文件。我想要类似的东西:

zcat BIGFILE.GZ | \
    awk (snag 10,000 lines and redirect to...) | \
    gzip -9 smallerPartFile.gz
Run Code Online (Sandbox Code Playgroud)

那里的 awk 部分,我基本上希望它占用 10,000 行并将其发送到 gzip,然后重复直到原始输入文件中的所有行都被消耗掉。我找到了一个声称这样做的脚本,但是当我在我的文件上运行它然后将原始文件与拆分然后合并的文件进行比较时,缺少行。所以,awk 部分出了点问题,我不确定哪个部分坏了。

目标:

  • 对整个操作一次通读源文件
  • 将源分成更小的部分,以换行符分隔。比如说,每个文件 10,000 行
  • 压缩由于拆分操作而创建的目标文件,并且在此脚本处理后无需额外步骤即可执行此操作。

这是代码。有人可以告诉我为什么这不会产生可以拆分和合并然后成功地与原始文件进行差异的文件吗?

# Generate files part0.dat.gz, part1.dat.gz, etc.
# restore with: zcat foo* | gzip -9 > restoredFoo.sql.gz (or something like that)
prefix="foo"
count=0
suffix=".sql"

lines=10000 # Split every 10000 line.

zcat /home/foo/foo.sql.gz |
while true; do
  partname=${prefix}${count}${suffix}

  # Use awk to read the required number of lines from …
Run Code Online (Sandbox Code Playgroud)

awk

7
推荐指数
1
解决办法
7498
查看次数

标签 统计

awk ×1