打印文件的随机行,但最大计数为特定值

打印文件的随机行,但最大计数为特定值

我有一个输入文件,我想从中随机选择一行。在每一行的列中都有一个值,我只想随机选择该值的最大计数的行数,而不是更多。

因此,为了简单起见,我从一个如下所示的测试文件开始:

1 1
2 1
3 1
4 1
5 2
6 2
7 3
8 4
9 4
10 4
11 5
12 5
13 5
14 5
15 5
16 6
17 6
18 7
19 8
20 8

现在我想随机选择行,但最多只能选择第 2 列中每个值 1 行:

1 1
6 2
7 3
9 4
13 5
17 6
18 7
19 8

这是我编写的用于选择最多行数的代码:

#!/bin/bash

for ((i>0;i<8;i++))
do
gawk -v i="${i}" 'BEGIN{n=1} {if (i==$2 && n<=1) {n++;print $0;} if (n>1){next}} ' input >> output
done

我如何扩展它以选择随机行最多?

答案1

对于 GNU sort,以 1 为最大值:

sort -R file | sort -uk2,2

对于任意值作为最大值:

sort -R file | awk -v max=2 '++count[$2] <= max' | head -n 8

相关内容