从文件中随机选择 id

Random selection of ids from a file

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

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

awk 救援!

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

OG1: D
OG2: F
OG3: F

要跳过某个字母,可以将主块改成

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

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

解释:

使用了这些命令行选项:

  • -n 循环输入文件的每一行
  • -l 在处理之前删除换行符,然后再将它们添加回去
  • -a 自动拆分模式——将输入行拆分为 @F 数组。默认为拆分空白。
  • -e 执行 perl 代码

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

输出:

OG1: A
OG2: F
OG3: F