我正在进行像awk '{print $3 > "file1.txt"}'
我注意到awk占用了太多RAM(文件很大)。流awk输出到文件消耗内存吗?这是否像流写一样工作,或文件是否保持打开状态直到程序终止?
我给出的确切命令是:
for i in ../../*.txt; do j=${i#*/}; mawk -v f=${j%.txt} '{if(NR%8<=4 && NR%8!=0){print >f"_1.txt" } else{print >f"_2.txt"}}' $i & done
很明显,我使用了mawk。五个输入文件各约为6GB,当我运行top
时,我看到22%的内存〜每个mawk进程在其峰值处占用5GB。我注意到它是因为我的系统由于内存不足而挂起。
我特别确定awk外部的重定向消耗的内存可以忽略不计。用比这个大得多的文件和比这更复杂的操作完成了几次;我从未遇到过这个问题。由于我必须将输入文件的不同部分复制到不同的输出文件,因此我在awk中使用了重定向。
我知道还有其他方法可以实现这项任务,无论如何我的工作都没有太多问题。我感兴趣的是写入文件时awk的工作原理。
我不确定这个问题是否更适合超级用户。