文件行信誉的变化

时间:2019-05-01 08:49:20

标签: awk

我有一个文件

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或其他某种语言更合适?

3 个答案:

答案 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