使用bash从文件中获取随机文本块

时间:2014-04-07 21:21:30

标签: bash random token

使用bash从文本文件中读取随机字符块的最简单方法是什么?

块是一组字符,以X开头,以X结尾,其中X是字符序列,通常为"\n\n"

我们可以假设文件有短行,每行少于200个字符。 块的行数不超过20行。

我见过像get random lineget text from between two tokens这样的帖子,但这并不是我所需要的。

我可以在C中编写一个简单的程序,它将读取文件中有多少个块,从给定范围中获取一个随机数,然后搜索具有此ID的块,但必须有一个更简单的方法。

实施例: X = "\n\n"

文件:( .不在文件中,我用它们在代码的开头和结尾处制作“空”行。

.
first line
second line and some other text

fourth line

sixth line
seventh line, more textęęę
.

首次运行脚本,输出:

fourth line

第二次运行脚本,输出:

first line
second line and some other text

你的忠实, user2420535

1 个答案:

答案 0 :(得分:3)

要在一次传递中从空行分隔的块文件中获得一个均匀的随机块,

awk -v RS='\n\n'  '
  BEGIN { srand(); } 
  rand() < 1.0/NR { s=$0; }  
  END { print s; }
  '   file

这是Reservoir Sampling的简单案例。