【问题标题】:Random selection of ids from a file从文件中随机选择 id
【发布时间】: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

【问题讨论】:

    标签: awk grep shuffle


    【解决方案1】:

    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
    

    【讨论】:

    • 这也给出了不同运行之间的随机性 ++
    • 在这种情况下,是否可以始终避免随机选择中的一个特定字母表说“C”?
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多