如何使用 Perl 从文件中获取恰好 n 个随机行?

2023-12-21

跟进this https://stackoverflow.com/questions/448005/whats-an-easy-way-to-read-random-line-from-a-file-in-unix-command-line问题,我需要准确地得到n文件中随机的行(或stdin)。这类似于head or tail,除了我想要中间的一些。

现在,除了使用链接问题的解决方案循环遍历文件之外,准确获取问题的最佳方法是什么n一口气跑几行?

作为参考,我尝试过这个:

#!/usr/bin/perl -w
use strict;
my $ratio = shift;
print $ratio, "\n";
while () {
    print if ((int rand $ratio) == 1); 
}

where $ratio是我想要的行的粗略百分比。例如,如果我想要 10 行中的 1 行:

random_select 10 a.list

然而,这并没有给我一个确切的金额:

aaa> foreach i ( 0 1 2 3 4 5 6 7 8 9 )
foreach? random_select 10 a.list | wc -l
foreach? end
4739
4865
4739
4889
4934
4809
4712
4842
4814
4817

我的另一个想法是读取输入文件,然后选择n从数组中随机选择,但如果我有一个非常大的文件,那就是一个问题。

有任何想法吗?

Edit:这是一个完全相同的副本this https://stackoverflow.com/questions/692312/randomly-pick-lines-from-a-file-without-slurping-it-with-unix问题。


这是我刚刚提出的一个很好的一次性算法,具有 O(N) 时间复杂度和 O(M) 空间复杂度,用于从 N 行文件中读取 M 行。

假设 M

  1. Let S是所选行的集合。初始化S到第一个M文件的行。如果最终结果的顺序很重要,请打乱顺序S now.
  2. 读入下一行l。到目前为止,我们已经阅读了n = M + 1总行数。我们想要选择的概率l因为我们的最后一行是M/n.
  3. Accept l有概率M/n;使用RNG来决定是接受还是拒绝l.
  4. If l已被接受,随机选择其中一行S并将其替换为l.
  5. 重复步骤 2-4,直到文件用完所有行,递增n每读一个新行。
  6. 返回集合S所选线路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Perl 从文件中获取恰好 n 个随机行? 的相关文章

  • 根据使用频率随机生成字母?

    如何根据常用语音中的使用频率随机生成字母 任何伪代码都值得赞赏 但如果用 Java 实现就更棒了 否则 只需朝正确的方向戳一下就会有所帮助 注意 我不需要生成使用频率 我确信我可以很容易地查找到它 我假设您将频率存储为 0 到 1 之间的浮
  • 生成易于记忆的随机标识符

    与所有开发人员一样 我们在日常工作中不断处理某种标识符 大多数时候 它与错误或支持票有关 我们的软件在检测到错误后 会创建一个包 该包的名称由时间戳和版本号格式化 这是创建合理唯一标识符以避免混淆包的一种廉价方法 例子 错误报告 20101
  • Perl - 将数组元素句子与变量进行比较

    我使用 grep 返回临时F 文件和 arrayWarning 之间不匹配的数组 my c grep map 1 temporaryF arrayWarning c 里面有很多行 例如 Sun Sep 30 00 05 55 fibre c
  • 在 Perl 中使用 POSIX ceil() 出现意外结果

    我一生都无法弄清楚为什么以下会产生这样的结果 use POSIX my g 6 65 my t g 4 my r t g my n r g my c ceil n print c n n 我知道印记太棒了 抱歉 我已经为我的应用程序解决了这
  • 生成固定长度的随机数组[重复]

    这个问题在这里已经有答案了 我只是想更改我的代码 以便每次运行代码时都会生成固定长度 100 个整数的随机数组 而不仅仅是在代码中包含一个预先设置的数组 我对此很陌生 所以只需要正确方向的指导 谢谢 public class Selecti
  • 如何将我的包导入分组到单个自定义包中?

    通常当我编写 perl 程序时 我曾经包含以下包 use strict use warnings use Data Dumper 现在 我想像这样 我不会为每个程序都包含所有这个包 为了那个原因我会将这些全部打包在我自己的包中 喜欢跟随 m
  • 将文件读入 Perl 中的变量 [重复]

    这个问题在这里已经有答案了 可能的重复 在 Perl 中将文件转换为字符串的最佳方法是什么 https stackoverflow com questions 206661 what is the best way to slurp a f
  • Random 并行生成数字 1 的次数超过 90% [重复]

    这个问题在这里已经有答案了 考虑以下程序 public class Program private static Random rnd new Random private static readonly int ITERATIONS 50
  • 如何将一堆 perl 模块加载到 perl 脚本中

    这就是我想做的 在我制作 开发的每个脚本中 我总是调用 Perl 库和子例程 例如 directory bin perl system source directory cshrc use Net Domain qw hostname ho
  • Perl 的核心库是如何管理的?

    根据我的理解 Perl 传统上只包含核心功能 人们安装额外的库来完成各种有用的 有时是非常基本的 事情 但在某些时候 Perl 默认附带了 核心库 因此您可以使用这些库而无需安装它们 来自Python 我很好奇这是如何管理的 具体来说 图书
  • 尝试让 GUI 使用 arrayList 在牌组中打印随机卡

    所以我目前正在用java开发一个卡牌战争游戏 我试图让 GUI 屏幕使用 arrayList 从一组卡片图像中打印 2 张随机卡片 必须使用它进行分配 卡片图像文件名为 1 png 2 png 52 png 并存储在 image card
  • 如何使用 Android Studio 2.1.3 从 Android 中的文本文件中获取随机行?

    我有一个 500 行的文本文件 我将此文本文件放置在 app src main assets 文件夹中 名称为 words txt 在此文件中 每一行都用换行符分隔 现在我需要从这个文本文件中获取随机行 在发布此内容之前 我访问了以下问题
  • Perl Regex:如何从 CSV 行中删除引号内的引号

    我从 CSV 文件中得到了一行 作为场围场和 作为字段分隔符作为字符串 有时有 在打破场围的数据中 我正在寻找一个正则表达式来删除这些 我的字符串看起来像这样 my csv qq 123456 024003 Stuff 28 stuff w
  • Perl 字符串替换:匹配但不替换正则表达式的一部分

    假设我在 Perl 中有一个字符串 我正在尝试匹配并替换为以下内容 string s a zA Z find a zA Z replace g 如图所示 我想替换两侧被非字母字符包围的所有内容 但是 当我替换字符串时 我不想也替换这些字符
  • 是否可以使用perl读取pdf文件中的文本?

    我想在 perl 中解析 pdf 文件中的文本 而不将 pdf 转换为任何其他格式 是否可以 是的你可以 看看CAM PDF http search cpan org dist CAM PDF 包裹 您可以使用此模块来提取文本 my pdf
  • 我能否确保在 5.10+ 上编写的 Perl 代码可以在 5.8 上运行?

    Perl 5 10 和 5 12 的一些新功能 例如 say 被定义为功能 您可以使用 feature 编译指示显式启用或禁止这些功能 但其他添加 例如正则表达式的命名捕获组 是隐式的 当我使用 5 10 解释器编写 Perl 但希望它也能
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • scipy.stats....rvs 和 numpy.random 随机抽取之间的区别

    看起来是否是相同的分布 从中抽取随机样本numpy random比这样做更快scipy stats rvs 我想知道是什么原因导致两者之间的速度差异 scipy stats uniform实际上使用了numpy 这里是stats中对应的函数
  • C# Random 类的问题

    我有一个代表一枚硬币的类 可以使用 Coin Flip 方法翻转它 Flip 使用 random Next 2 得到代表正面或反面的 0 或 1 这很好用 有点 对于该程序 我需要有 2 个我制作的硬币 比如说 coin1 和 coin2
  • WWW::Mechanize::Firefox - 如何打开多个选项卡

    我想打开两个单独的选项卡并在 Firefox 中保持打开状态 我在用WWW Mechanize Firefox 请找到下面的代码 usr bin perl w use strict use WWW Mechanize Firefox my

随机推荐

  • 逐行将 .txt 读取到批处理变量中

    我有一个批处理脚本 可以将 ping 发送到某些 PC 可用的 PC 被写入文本文件中 因此每台 PC 都站在自己的行中 另一个批处理脚本将一些文件复制到 PC 目前它尝试复制到所有 PC 现在我想修改脚本 以便批处理读出文本文件并仅复制到
  • 图结构中拥有的指针

    在 Rust 社区的慷慨帮助下 我成功地获得了使用托管指针组装的拓扑数据结构的基础 这一切结合得相当好 总的来说我对 Rust 非常兴奋 然后我读了这个post http pcwalton github io blog 2013 06 02
  • reflog 过期并 gc prune 后推送到原点

    我使用以下命令删除了本地存储库中的一些无法访问和悬空的提交 git fsck unreachable dangling no reflogs git reflog expire expire now all git gc prune now
  • 如何使用react js在Fetch API中设置超时

    我在 React js 中使用 fetch post 方法 当向后端发送请求时 需要 7 分钟才能提供响应 然后前端会自动超时 你能帮我解决一下如何在 fetch 方法中设置 10 分钟的时间 让前端等待响应 并且只有当后端花费超过 10
  • 前缀/后缀增量运算符

    我想确保我正确理解按值传递与按引用传递 特别是 我正在查看增量的前缀 后缀版本 对象的运算符 假设我们有以下课程X class X private int i public X i 0 X operator i return this pr
  • 单选按钮在 Chrome 中显示不需要的白色背景。火狐浏览器没问题

    在 Google Chrome 中 单选按钮会在圆圈周围显示不需要的白色背景 这在 Firefox 中并未按预期显示 Please check these images 她是有问题的页面的直接链接 在 Firefox 和 Chrome 中检
  • 是否存在 setfable nthcdr 实现?

    我正在使用 clisp 我想知道是否有任何带有可设置版本的 nthcdr 的库可供我使用 你可以用以下方法解决它 let lst list 1 2 3 4 n 2 setf cdr nthcdr 1 n lst 5 6 7 l gt 1 2
  • 改装 400 错误请求

    这是我用于网络调用的函数 private void getSample Log d getSample OkHttpClient client new OkHttpClient HttpLoggingInterceptor intercep
  • 如何从批处理脚本检查Java安装?

    我需要编写一个批处理脚本来查找是否安装了Java 如果安装了 那么在什么路径下 我觉得它必须是类似这样的 for f j in java exe do set JAVA HOME 但我不明白 附 它必须与带有空格两个的路径一起使用 就像ja
  • Haskell主要函数

    module Main where qsort Ord a gt a gt a qsort qsort x xs qsort smaller x qsort larger where smaller a a lt xs a lt x lar
  • 使用 Android SIP 堆栈进行点对点 SIP 呼叫?

    我一直在寻找一种方法来设置 Android SIP 堆栈 以便能够以临时方式在同一网络上的两个设备之间建立 SIP 呼叫 即无需注册到 SIP 服务器 我无法让它工作 因为 SIP 演示包括服务器注册 如果没有此步骤 我无法让它拨打或接听电
  • python中的全局计数器线程安全吗?

    import threading import time counter 0 def increase name global counter i 0 while i lt 30 this for loop is for consuming
  • 具有固定参数值的路由的别名

    我有这条路线 Route get MyModel id MyController show 方法show 接受一个名为id我想设置一个别名 MyModel 1所以可以从 MyCustomURL 我已经尝试了一些组合 例如 Route get
  • 获取 powershell 显示驱动器上可以找到某个文件的所有路径

    我正在尝试构建一个函数 该函数将显示某个文件名所在的所有路径 该函数将采用一个参数 即文件名 结果要么是所有路径的列表 要么是一条消息说系统上没有这样的文件 我是 Powershell 新手 目前还没有掌握语法 我试过这个 Get Chil
  • 键盘不适用于 uiactionsheet 中的文本字段

    我在 uiactionsheet 中添加了 textfeld 作为 void showAction printf getting action ready n UIActionSheet asheet UIActionSheet alloc
  • Prolog - 递归地将数字附加到列表中

    我刚刚开始学习 Prolog 并且在理解递归概念时遇到了麻烦 现在 仅出于练习目的 我正在尝试编写一个程序 将 10 个数字附加到列表中 然后打印出该列表 这个程序的自我强加的规则是列表必须在主谓词中 声明 我不确定这对于 Prolog 来
  • 我可以使用正则表达式和 pandas 在两个数据帧之间执行左连接/合并吗?

    我正在尝试使用 Python 中的正则表达式执行左合并 该正则表达式可以处理多对多关系 例子 df1 pd DataFrame a b c d columns col1 df1 regex df1 col1 col1 regex 0 a a
  • LinqToSql 查询中的条件快捷方式

    这是一个 LinqToSql 的小陷阱 Returns the number of counties in a state or all counties in the USA if the state is null public sta
  • 向字符串类添加函数

    我知道从 std string 类继承是一个糟糕的主意 但只是尝试使用继承向 string 类添加自定义函数以进行虚拟分配 我想将我的函数称为 add 当我执行 str add str1 str2 时它应该在字符串的开头附加 str1 在字
  • 如何使用 Perl 从文件中获取恰好 n 个随机行?

    跟进this https stackoverflow com questions 448005 whats an easy way to read random line from a file in unix command line问题