行をランダムに選択したい入力ファイルがあります。各行には列に値があり、その値の最大数を含む行数をランダムに選択したいと思います。
そのため、作業を簡単にするために、次のテストファイルから始めました。
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