【发布时间】:2010-10-16 02:13:19
【问题描述】:
我有一个 10^7 行的文件,我想在其中随机选择 1/100 行 从文件中。这是我拥有的 AWK 代码,但它包含所有文件内容 之前。我的电脑内存无法处理这样的啜饮。还有其他方法吗?
awk 'BEGIN{srand()}
!/^$/{ a[c++]=$0}
END {
for ( i=1;i<=c ;i++ ) {
num=int(rand() * c)
if ( a[num] ) {
print a[num]
delete a[num]
d++
}
if ( d == c/100 ) break
}
}' file
【问题讨论】:
-
仅供参考 10,000,000 的 1% 太大了——您只需要大约 1000 就可以有 +/-3% 的误差范围,而 10,000 则需要 +/-1% 的 MOE。
-
@Steven:非常感谢。你是如何得出上面的 MOE 数字的?有什么参考吗?我真的很想了解更多,因为我的统计背景很弱。顺便说一句,您的意见似乎与下面的 cadrian 不同(即 1% 是不够的)
-
@StevenHuwig 链接似乎已离线。缓存:web.archive.org/web/20131104235055/http://… 维基百科:en.wikipedia.org/wiki/Margin_of_error
标签: linux unix awk random-sample file-processing