【发布时间】:2011-10-09 16:01:43
【问题描述】:
我有一个大 (3GB) 的 gzip 文件,其中包含两个字段:NAME 和 STRING。我想将此文件拆分为较小的文件 - 如果字段一是 john_smith,我希望将字符串放在 john_smith.gz 中。注意:字符串字段可以并且确实包含特殊字符。
我可以使用 BASH 在域上的 for 循环中轻松完成此操作,但我更喜欢使用 AWK 一次读取文件的效率。
我尝试在 awk 中使用系统函数,并在字符串周围使用转义单引号
zcat large_file.gz | awk '{system("echo -e '"'"'"$1"\t"$2"'"'"' | gzip >> "$1".gz");}'
并且它在大多数行上都能正常工作,但是其中一些会打印到 STDERR 并给出 shell 无法执行命令的错误(shell 认为字符串的一部分是命令)。看起来特殊字符可能会破坏它。
对如何解决这个问题有任何想法,或者有什么替代实现会有所帮助?
谢谢!
-肖恩
【问题讨论】:
-
欢迎来到 SO!您收到了几个高质量的答案。如果您收到了一个很好的答案,请立即通过投票让他们;如果答案完全解决了您的问题,最好“接受”(绿色复选标记),这样其他人就会知道他们何时正在寻找相同的解决方案。