我有一个10^7行的文件,我想在其中随机 Select 1/100行

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

推荐答案

如果你有那么多行,你确定你想要exactly 1%还是统计估计就足够了?

在第二种情况下,只需在每行随机抽取1%...

awk 'BEGIN {srand()} !/^$/ { if (rand() <= .01) print $0}'

如果希望标题行加上后面的随机行样本,请使用:

awk 'BEGIN {srand()} !/^$/ { if (rand() <= .01 || FNR==1) print $0}'

Linux相关问答推荐

为什么Read()和cin.get()对输出缓冲区的影响不同?

在c++编译期间,什么是linux命令,它给出了链接库的路径?

在 Ubuntu 中,如何设置 Tomcat 9 以使用 Java 17?

在 Ansible 中使用 JSON 查询过滤数据以从 ansible_fact 中提取数据

当 skylake 有 fsgsbase 时,为什么使用 __builtin_ia32_wrfsbase64 会收到非法指令?

Linux time 命令输出中 real、user 和 sys 的含义

ld-linux.so.2 和 linux-gate.so.1 是什么?

Eclipse 的 C# 插件

如何构建在 Android 上运行的本机(命令行)可执行文件?

永久反转补丁文件

适用于 Linux 和 Mac 的 HTTP 调试代理

任何方式以编程方式在android上运行shell命令?

未定义的引用 'shm_open',已在此处添加 -lrt 标志

如何克隆 OpenLDAP 数据库

如何准确复制文件夹

如何仅打印 hexdump 中的十六进制值,而不打印行号或 ASCII 表?

仅使用 proc 获取本地网络接口地址?

如何找到只对所有者具有特定权限的文件?

rename() 是原子的吗?

linux perf:如何解释和查找热点