从文件中随机选择 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
我有一个以下格式的文本文件,字母是由 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