从文件中读取随机行而不重复

时间:2016-10-19 10:44:37

标签: bash shell sh

我正在创建一个bash脚本来生成带有随机值的XML。我有一个txt文件,我用来填充标签超过300,000行。 最多有50,000个变量,因此300,000个可供选择就足以创建随机数据,但我每次都会得到重复数据。 我更喜欢拥有50,​​000个唯一变量。

我使用这段代码从txt文件中获取一个随机行:

randomline=$(shuf -n 1 random.txt)

有没有办法防止重复?

提前致谢!

2 个答案:

答案 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)

我现在正在测试它,直到现在我还没有重复! ; - )