16개의 컬렉션이 있고 총 8개의 숫자가 있습니다.
(11 12 11 44 11 12 11 23)
(12 21 11 44 11 12 11 23)
(11 42 21 13 12 21 31 14)
(11 42 21 13 12 21 11 34)
and so on
각 8개 튜플에 중복 항목이 있는지 확인하고 싶습니다. 숫자가 나타나는 순서는 중요하지 않습니다.
결과는 각 패턴의 발생 횟수를 반환합니다.
(11 12 11 44 11 12 11 23) 1
(12 21 11 44 11 12 11 23) 1
(11 42 21 13 12 21 31 14) 2
(11 42 21 13 12 21 11 34) 1
답변1
이것은 한 가지 방법입니다. 중복된 줄이 포함된 다음 입력 파일로 시작합니다.
cat tupl
11 12 11 44 11 12 11 23
12 21 11 44 11 12 11 23
12 21 11 44 11 12 11 23
12 21 11 44 11 12 11 23
12 21 11 44 11 12 11 23
11 42 21 13 12 21 31 14
11 42 21 13 12 21 11 34
11 12 11 44 11 12 11 23
각 행의 숫자 순서는 중요하지 않다고 말씀하셨으므로 먼저 각 행의 숫자를 정렬할 수 있습니다.
awk ' {split( $0, a, " " ); asort( a ); for( i = 1; i <= length(a); i++ ) printf( "%s ", a[i] ); printf( "\n" ); }' tupl
11 11 11 11 12 12 23 44
11 11 11 12 12 21 23 44
11 11 11 12 12 21 23 44
11 11 11 12 12 21 23 44
11 11 11 12 12 21 23 44
11 12 13 14 21 21 31 42
11 11 12 13 21 21 34 42
11 11 11 11 12 12 23 44
이제 awk의 연관 배열 아이디어를 사용하여 결과를 다음 명령으로 파이프하여 동일한 행 수를 계산할 수 있습니다.
awk '{a[$0]++} END {for (i in a) print i, a[i]}'
11 12 13 14 21 21 31 42 1
11 11 11 11 12 12 23 44 2
11 11 12 13 21 21 34 42 1
11 11 11 12 12 21 23 44 4