我有一个 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
最佳答案
如果您有那么多行,您确定要正好 1% 还是统计估计就足够了?
在第二种情况下,只需在每行随机化 1%...
awk 'BEGIN {srand()} !/^$/ { if (rand() <= .01) print $0}'
如果您想要标题行加上后面的随机行样本,请使用:
awk 'BEGIN {srand()} !/^$/ { if (rand() <= .01 || FNR==1) print $0}'
关于linux - 从文件中随机选择行而不用 Unix 啜饮它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/692312/