파일의 임의 행을 인쇄하지만 특정 값의 최대 개수를 사용합니다.

파일의 임의 행을 인쇄하지만 특정 값의 최대 개수를 사용합니다.

행을 무작위로 선택하려는 입력 파일이 있습니다. 각 행에는 열에 값이 있으며 해당 값의 최대 개수를 포함하는 행 수를 무작위로 선택하고 싶습니다.

그래서 일을 단순하게 유지하기 위해 다음과 같은 테스트 파일로 시작했습니다.

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의 경우 sort1이 최대값입니다.

sort -R file | sort -uk2,2

최대값의 경우:

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

관련 정보