从文件中随机选择ID

时间:2016-10-27 16:20:10

标签: awk grep shuffle

我有一个以下格式的文本文件,字母表是由空格分隔的ids。

OG1: A B C D E
OG2: C F G D R
OG3: A D F F F

我想从每个组中随机提取一个id

OG1: E
OG2: D
OG3: A

我尝试使用

 shuf -n 1 data.txt

给了我

 OG2: C F G D R

2 个答案:

答案 0 :(得分:2)

awk救援!

$ awk -v seed=$RANDOM 'BEGIN{srand(seed)} {print $1,$(rand()*(NF-1)+2)}' file

OG1: D
OG2: F
OG3: F

要跳过某个字母,您可以将主要块更改为

... {while ("C"==r=$(rand()*(NF-1)+2)); print $1,r}' file

答案 1 :(得分:2)

perl -lane 'print "$F[0] ".$F[rand($#F-1)+1]' data.txt

说明:

使用以下命令行选项:

  • -n循环输入文件的每一行
  • -l在处理之前删除换行符,然后将其添加回来
  • -a autosplit模式 - 将输入行拆分为@F数组。默认为在空格上拆分。
  • -e执行perl代码

@F是每行中的单词数组,从$F[0]开始编制索引 $#F@F

中的字数

输出:

OG1: A
OG2: F
OG3: F