我想要一些帮助以awk编写代码,以便在10,000条记录中随机选择5,000条。
答案 0 :(得分:1)
排序有一个随机数。
假设输入文件名为10k
,
sort -R 10k | head -5000 > 5k # write selections to "5k"
答案 1 :(得分:0)
以下方法适用于单行和多行记录或具有特定记录分隔符的记录。
定义脚本random_subset.awk
# Uniform(m) :: returns a random integer such that
# 1 <= Uniform(m) <= m
function Uniform(m) { return 1+int(m * rand()) }
# KnuthShuffle(m) :: creates a random permutation of the range [1,m]
function KnuthShuffle(m, i,j,k) {
for (i = 1; i <= m ; i++) { permutation[i] = i }
for (i = 1; i <= m-1; i++) {
j = Uniform(i-1)
k = permutation[i]
permutation[i] = permutation[j]
permutation[j] = k
}
}
BEGIN{ srand() }
{a[NR]=$0}
END{ KnuthShuffle(NR); for(r = 1; r <= count; r++) print a[permutation[r]] }
然后您可以将其运行为:
$ awk -v count=5000 -f subset.awk inputfile > outputfile
或者如果您有一个文件,其中记录分隔符由诸如@
之类的字符给定,则可以执行以下操作:
$ awk -v count=5000 -v RS='@' -v ORS='@' -f subset.awk inputfile > outputfile
如果要选择随机段落,可以执行以下操作:
$ awk -v count=5000 -v RS='' -v ORS='\n\n' -f subset.awk inputfile > outputfile