我正在学习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|
我知道我的代码效率不高[或不错],并且我愿意接受建议[]。
谢谢!
答案 0 :(得分:1)
这是执行此操作的正确方法之一
$ sort -t'|' -u -k1,1 file | shuf -n3
Mark|5.00|20|
Kathy|4.00|10|
Jise|5.62|0|
将-n3
更改为所需数量的唯一条目。