我有一个输入文件,我想从中随机选择一行。在每一行的列中都有一个值,我只想随机选择该值的最大计数的行数,而不是更多。
因此,为了简单起见,我从一个如下所示的测试文件开始:
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