从单位为2行的文件中随机选择(单位)。

时间:2017-06-13 21:29:41

标签: linux bash shell sorting text-processing

我想从文件中随机选择行/单位,但单位由2行组成。

例如,文件看起来像这样

  

亚当
  苹果
  柯以敏
  糖果
  史蒂夫
  芯片
  大卫
  肉类
  卡罗尔
  胡萝卜

我想随机选择让我们说2个单位组

例如

  

亚当
  苹果
  大卫
  肉

  

史蒂夫
  芯片
  卡罗尔
  胡萝卜

我已尝试使用shufsort -R,但他们只会改变1行。有人可以帮帮我吗? 谢谢。

3 个答案:

答案 0 :(得分:2)

你可以通过在洗牌之前加入这些行来对shuf这样做(对于一般的文件格式,如果这些行描述单个项目,这可能不是一个坏主意):

$ < file sed -e 'N;s/\n/:/' | shuf | head -1 | tr ':' '\n'
Carol
Carrots

sed一次加载两行,并用冒号连接它们。

答案 1 :(得分:0)

在正确的范围内选择一个随机数,确保它是奇数(如果需要),然后使用sed打印2行:

$ a=$(expr $RANDOM % \( $(wc -l < input) / 2 \) \* 2 + 1)
$ sed -n -e ${a}p -e $((a+1))p input

答案 2 :(得分:0)

不是选择要打印的行,而是可以遍历文件并打印每个&#34;单元&#34;具有特定概率。例如,打印(大约)10%的&#34;单位&#34;在文件中,您可以这样做:

awk 'BEGIN{srand()} NR%2 && (rand() < .1) {print; getline; print}' input