linux - 从文件中随机选择行而不用 Unix 啜饮它

标签 linux unix awk random file-processing

我有一个 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/

相关文章:

bash - 根据另一列计算列的平均值

regex - 在正则表达式中表达超出 $ 的匹配项

regex - gnu 找到 : apply -regex on basename only

linux - 查看名称中是否存在带有空格的目录/文件

python - session 未创建异常 : Message: session not created from disconnected: unable to connect to renderer using Chromedriver on Linux Centos 7 Server

unix - 结合 awk 和 csum 对字段进行哈希处理

linux - 第一列中相同值的第二列和第三列之和

Ruby:如何使我的程序陷入信号并从信号中正确退出?

Java - 使用数组和流来解析文件时没有得到正确的项目

c - 尝试使用 C 子进程打印文件中的单词