【发布时间】:2016-02-19 12:28:48
【问题描述】:
我有一个 4 GB 的文件,我需要对其进行一些操作。我有一个 Bash 脚本来执行此操作,但 Bash 似乎不适合将大型数据文件读入数组。所以我决定用 awk 分解我的文件。
我当前的脚本是:
for((i=0; i<100; i++)); do awk -v i=$i 'BEGIN{binsize=60000}{if(binsize*i < NR && NR <= binsize*(i+1)){print}}END{}' my_large_file.txt &> my_large_file_split$i.fastq; done
然而,这个脚本的问题是它会读入并循环这个大文件 100 次(这大概会导致大约 400GB 的 IO)。
问题:有没有更好的读取大文件的策略?也许在 awk 中写入文件而不是重定向其输出?
【问题讨论】:
-
为什么不直接使用
split(1)? -
这似乎也是一个合理的解决方案。