我有一个文件
4 5 6 6
1 7 5 5
7 0 2 1
7 8 0 6
,我想生成的文件具有从该文件中随机选择的行,并且信誉良好。因此输出可以是例如:
4 5 6 6
1 7 5 5
1 7 5 5
7 8 0 6
7 8 0 6
1 7 5 5
1 7 5 5
7 8 0 6
我的意思是,某些行将在输出中出现更多次,某些行为0次。是否可以生成具有信誉的随机数列表,并根据它从输入中选择行?是否可以用awk或其他某种语言更合适?
答案 0 :(得分:3)
如果这还不是您所需要的:
$ shuf -n $(wc -l < file) -r file
4 5 6 6
7 8 0 6
1 7 5 5
1 7 5 5
然后编辑您的问题以阐明您的要求。
答案 1 :(得分:2)
不了解信誉的概念,但这是一种仅使用随机性的方法:
$ awk -v seed=$RANDOM '{ # set the random seed externally
a[NR]=$0 # hash records to a
}
END {
srand(seed)
for(i=1;i<=4;i++) # 4 is the number of records to output
print a[int(1+rand()*NR)] # get a random array element and output it
}' file
输出示例:
7 8 0 6
7 8 0 6
7 8 0 6
1 7 5 5
答案 2 :(得分:1)
您也可以使用coreutils shuf和sed执行此操作,例如:
n=$(wc -l < infile)
shuf -n $n -i 1-$n -r | sed 's/$/p/' | sed -nf - infile
输出示例:
4 5 6 6
4 5 6 6
1 7 5 5
1 7 5 5