【发布时间】:2017-03-10 10:30:47
【问题描述】:
我有一个以下格式的文本文件,字母是用空格分隔的 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
【问题讨论】:
我有一个以下格式的文本文件,字母是用空格分隔的 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 $1,$(rand()*(NF-1)+2)}' file
OG1: D
OG2: F
OG3: F
要跳过某个字母,可以将主块更改为
... {while ("C"==r=$(rand()*(NF-1)+2)); print $1,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
【讨论】: