gpt4 book ai didi

perl - 使用 perl 从文本文件中获取唯一的随机行(在每个脚本运行时)

转载 作者:行者123 更新时间:2023-12-04 00:54:58 25 4
gpt4 key购买 nike

有一个类似于下一个名为“input.txt”的文本文件

some field1a | field1b | field1c
...another approx 1000 lines....
fielaNa | field Nb | field Nc

我可以选择任何字段分隔符。

需要一个脚本,每次离散运行都会从该文件中获得一个唯一(从不重复)的随机行,直到使用所有行。

我的解决方案:我在文件中添加了一列,所以有
0|some field1a | field1b | field1c
...another approx 1000 lines....
0|fielaNa | field Nb | field Nc

并用下一个代码处理它:
use 5.014;
use warnings;
use utf8;
use List::Util;
use open qw(:std :utf8);
my $file = "./input.txt";

#read all lines into array and shuffle them
open(my $fh, "<:utf8", $file);
my @lines = List::Util::shuffle map { chomp $_; $_ } <$fh>;
close $fh;

#search for the 1st line what has 0 at the start
#change the 0 to 1
#and rewrite the whole file

my $random_line;
for(my $i=0; $i<=$#lines; $i++) {
if( $lines[$i] =~ /^0/ ) {
$random_line = $lines[$i];
$lines[$i] =~ s/^0/1/;
open($fh, ">:utf8", $file);
print $fh join("\n", @lines);
close $fh;
last;
}
}
$random_line = "1|NO|more|lines" unless( $random_line =~ /\w/ );

do_something_with_the_fields(split /\|/, $random_line))
exit;

这是一个可行的解决方案,但不是很好,因为:
  • 每次脚本运行时,行序都会发生变化
  • 不是并发脚本运行安全的。

  • 如何写得更有效更优雅?

    最佳答案

    如果在不同的文件中保留一个打乱的行号列表,每次使用它时删除第一个行号呢?可能需要一些锁定来确保并发脚本运行的安全性。

    关于perl - 使用 perl 从文本文件中获取唯一的随机行(在每个脚本运行时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11612283/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com