我有一个以下格式的文本文件,字母表是由空格分隔的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
答案 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