Skip to content
Advertisement

Obtaining UNIQUE VALUE occurrences count in a set of COLUMNS using AWK

IGNORING columns 1 & 2 (only the rest of the columns); I would like to obtain the occurrence COUNT of UNIQUE EVEN values (ignoring ODD ones) for the following set of data.

I have tried:

awk '{ a[$3, $4, $5, $6, $7]++ } END { for (b in a) { cnt+=1 } {print cnt}}' file

I obtain 76 but I don’t expect this value.

>         0 0 
>         1 0 0
>         2 0 2
>         3 0 0 6
>         4 0 0 8
>         5 0 0 10
>         6 0 2 14
>         7 0 2 16
>         8 0 0 6 20
>         9 0 0 8 24
>         10 0 0 8 26
>         11 0 0 10 32
>         12 0 0 10 34
>         13 0 2 14 40
>         14 0 2 16 42
>         15 0 0 8 24 48
>         16 0 0 8 24 50
>         17 0 0 8 26 56
>         18 0 0 10 32 60
>         19 0 0 10 34 64
>         20 0 0 10 34 66
>         21 0 2 14 40 72
>         22 0 0 8 24 48 76
>         23 0 0 8 24 50 82
>         24 0 0 8 26 56 88
>         25 0 0 8 26 56 90
>         26 0 0 10 32 60 96
>         27 0 0 10 32 60 98
>         28 0 0 10 34 64 104
>         29 0 0 10 34 64 106
>         30 0 0 10 34 66 112
>         31 0 0 10 34 66 114
>         0 1 
>         1 1 2 5
>         2 1 2
>         3 1 2 12 23 19
>         4 1 2 12 23
>         5 1 2 12
>         6 1 2 12 28
>         7 1 2 12 28 36
>         8 1 2 12 30 47 45
>         9 1 2 12 30 47
>         10 1 2 12 30
>         11 1 2 12 30 52
>         12 1 2 12 28 38
>         13 1 2 12 28 38 62
>         14 1 2 12 28 38 62 68
>         15 1 2 12 30 54 75
>         16 1 2 12 30 54
>         17 1 2 12 30 54 78
>         18 1 2 12 30 54 78 84
>         19 1 2 12 30 54 78 84 92
>         20 1 2 12 28 38 62 70
>         21 1 2 12 28 38 62 70 108
>         22 1 2 12 30 54 80
>         23 1 2 12 30 54 78 86
>         24 1 2 12 30 54 78 86 120
>         25 1 2 12 30 54 78 84 94
>         26 1 2 12 30 54 78 84 94 124
>         27 1 2 12 30 54 78 84 92 102
>         28 1 2 12 30 54 78 84 92 102 128
>         29 1 2 12 28 38 62 70 110
>         30 1 2 12 28 38 62 70 110 130
>         31 1 2 12 28 38 62 70 108 116
>         0 2 
>         1 2 2 5
>         2 2 2
>         3 2 2 5 6
>         4 2 2 5 6 18
>         5 2 2 5 6 18 22
>         6 2 2 14
>         7 2 2 16
>         8 2 2 5 6 20
>         9 2 2 5 6 20 44
>         10 2 2 5 6 18 26
>         11 2 2 5 6 18 22 32
>         12 2 2 5 6 18 22 32 58
>         13 2 2 14 40
>         14 2 2 16 42
>         15 2 2 5 6 20 44 50 75
>         16 2 2 5 6 20 44 50
>         17 2 2 5 6 18 26 56
>         18 2 2 5 6 18 22 32 60
>         19 2 2 14 40 72 109 101
>         20 2 2 14 40 72 109
>         21 2 2 14 40 72
>         22 2 2 5 6 20 44 50 80
>         23 2 2 5 6 20 44 50 80 118
>         24 2 2 5 6 20 44 50 80 118 120
>         25 2 2 5 6 20 44 50 80 118 120 122
>         26 2 2 14 40 72 109 101 102 127
>         27 2 2 14 40 72 109 101 102
>         28 2 2 14 40 72 109 101 104
>         29 2 2 14 40 72 116 133 131
>         30 2 2 14 40 72 116 133
>         31 2 2 14 40 72 116
>         0 3 
>         1 3 0
>         2 3 0 4
>         3 3 0 6
>         4 3 0 6 18
>         5 3 0 6 18 22
>         6 3 0 4 16 37
>         7 3 0 4 16
>         8 3 0 6 20
>         9 3 0 6 18 26 47
>         10 3 0 6 18 26
>         11 3 0 6 18 22 32
>         12 3 0 6 18 22 32 58
>         13 3 0 4 16 42 69
>         14 3 0 4 16 42
>         15 3 0 6 18 26 47 48
>         16 3 0 6 18 26 47 48 74
>         17 3 0 6 18 26 56
>         18 3 0 6 18 22 32 60
>         19 3 0 6 18 22 32 58 64
>         20 3 0 6 18 22 32 58 66
>         21 3 0 6 18 22 32 58 66 108
>         22 3 0 6 18 26 47 48 76
>         23 3 0 6 18 26 56 86
>         24 3 0 6 18 26 56 88
>         25 3 0 6 18 26 56 90
>         26 3 0 6 18 22 32 60 96
>         27 3 0 6 18 22 32 60 98
>         28 3 0 6 18 22 32 58 64 104
>         29 3 0 6 18 22 32 58 64 106
>         30 3 0 6 18 22 32 58 66 112
>         31 3 0 6 18 22 32 58 66 114
>         0 4 
>         1 4 0
>         2 4 2
>         3 4 0 6
>         4 4 0 8
>         5 4 0 10
>         6 4 2 16 37
>         7 4 2 16
>         8 4 0 8 24 45
>         9 4 0 8 24
>         10 4 0 8 26
>         11 4 0 8 26 52
>         12 4 2 16 37 38
>         13 4 2 16 42 69
>         14 4 2 16 42
>         15 4 0 8 24 48
>         16 4 0 8 24 50
>         17 4 0 8 26 56
>         18 4 0 8 26 52 60
>         19 4 2 16 37 38 64
>         20 4 2 16 42 69 70
>         21 4 2 16 42 69 72
>         22 4 0 8 24 48 76
>         23 4 0 8 24 50 82
>         24 4 0 8 26 56 88
>         25 4 0 8 26 52 60 94
>         26 4 0 8 26 52 60 96
>         27 4 0 8 26 52 60 98
>         28 4 2 16 37 38 64 104
>         29 4 2 16 42 69 70 110
>         30 4 2 16 42 69 70 112
>         31 4 2 16 42 69 70 114

Advertisement

Answer

You can try this awk command to count unique values ignoring 1st and 2nd column:

awk '{$1=$2=""; !seen[$0]++} END{print length(seen)}' file
130

If you are counting uniques excluding 1st and 2nd columns and ignoring odd numbers then use:

awk '{for (i=3; i<=NF; i++) !($i%2) && !seen[$i]++} END{print length(seen)}' file
63
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement