我正在创建一个bash脚本来生成带有随机值的XML。我有一个txt文件,我用来填充标签超过300,000行。 最多有50,000个变量,因此300,000个可供选择就足以创建随机数据,但我每次都会得到重复数据。 我更喜欢拥有50,000个唯一变量。
我使用这段代码从txt文件中获取一个随机行:
randomline=$(shuf -n 1 random.txt)
有没有办法防止重复?
提前致谢!
答案 0 :(得分:1)
你的问题是,为了获得n行,你{n}次shuf
次,并且总是选择第一行。所以有可能多次获得同一行。
假设您的文件不包含重复的行。您可以shuf一次并将结果保存到临时文件或内存。并设置一个计数器,每次你想选择一个随机行,你读取亚麻布行==计数器值。之后递增计数器。因此,您有独特的随机线。
(如果将shuf结果保存在内存中,可以使其作为Stack工作,即读取和删除行(pop))
答案 1 :(得分:0)
感谢您的解决方案。它让我重回正轨。 我这样实现了它:
read "number of lines" number
sort -uR ~/Data/random.txt | head -$number > random.dat
以及以下的......循环:
randomline=$(sed "${i}q;d" random.dat)
我现在正在测试它,直到现在我还没有重复! ; - )