我有一个包含 5000 万行的文件,我必须从中随机抽取 1000 行。
首先,我创建 1000 个随机数;然后我用
sed -n "$random{p;q}" file
真的很慢;一条线输出至少要5-6秒。
所以我认为我应该优化打印特定的线速度。
我们有很多方法可以打印特定的行:
sed -n "$line{p;q}" file
awk "NR==$line{print}" file
head -$line file | tail -1
这一切都很慢......打印特定行大约需要 5-6 秒。
shell中是否有其他方法可以打印特定行?或者python,perl可以比shell更快?还是我解决这个问题的方法不对?
- - - - - - - - - - - - - - - - - - - - 分裂 - - - - - -------------------------------------
迭代1000个随机数,每次使用shell一次,可能会产生1000次io操作。也许我应该先用一个数组来保存随机数,然后迭代一次文件。
random_array=()
awk '{if ( NR in $random_array ) print;}' file
好吧,我会以这种方式测试并稍后粘贴结果