通过id-uniques标准对文件进行随机采样

时间:2018-11-30 17:52:33

标签: shell awk

我正在学习AWK来读取一个类似于此MasterFile的大文件:

Beth|4.00|0|
Dan|3.75|0|
Kathy|4.00|10|
Mark|5.00|20|
Mary|5.50|22|
Susie|4.25|18|
Jise|5.62|0|
Mark|5.60|23.3|
Mary|8.50|42|
Susie|8.75|8.8|
Jise|3.62|0.8|
Beth|3.21|10|
Dan|8.39|20|

我想从第一列以N值(我选择它)的唯一值(K值)中取样。

我要做的事情如下:我从第一列中选​​择唯一值并将其另存为IDfile.txt。后来,我从该存档中提取了K个随机值,并将其与MasterFile相匹配。我的意思是:

awk -F\| 'BEGIN{srand()}{print rand() " " $0}' IDfile | sort -n | tail -n K| awk -F'[[:blank:]|]+' 'BEGIN{OFS="|"}{$1="";sub(/\|/,"")}'1>tmp | awk -F\| 'NR==FNR{a[$1];next} {for (i in a) if(index($0,i)) print $0}' tmp MasterFile

但是输出中有重复的值,而我想得到的结果是(假设K = 3):

Beth|4.00|0|
Mark|5.60|23.3|
Mary|5.50|22|

我知道我的代码效率不高[或不错],并且我愿意接受建议[]。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是执行此操作的正确方法之一

$ sort -t'|' -u -k1,1 file | shuf -n3

Mark|5.00|20|
Kathy|4.00|10|
Jise|5.62|0|

-n3更改为所需数量的唯一条目。