search duplicate element array

arrays, bash, duplicates

Solution

To check duplicates this code is much simpler and works in both cases:

uniqueNum=$(printf '%s\n' "${arr[@]}"|awk '!($0 in seen){seen[$0];c++} END {print c}')

(( uniqueNum != ${#arr[@]} )) && echo "Found duplicates"

EDIT: To print duplicates use this awk:

printf '%s\n' "${arr[@]}"|awk '!($0 in seen){seen[$0];next} 1'

Awk command stores in an array `seen` if a line isn't already part of `seen` array and next move to the next line. `1` in the end prints only those lines that are duplicates.

Problem

This one work: ``` arr[0]="XX1 1" arr[1]="XX2 2" arr[2]="XX3 3" arr[3]="XX4 4" arr[4]="XX5 5" arr[5]="XX1 1" arr[6]="XX7 7" arr[7]="XX8 8" duplicate() { printf '%s\n' "${arr[@]}" | sort -cu |& awk -F: '{ print $5 }'; } duplicate_match=$(duplicate) echo "array: ${arr[@]}" # echo "duplicate: $duplicate_match" [[ ! $duplicate_match ]] || { echo "Found duplicate:$duplicate_match"; exit 0; } echo "no duplicate" ``` with same code, this one doesn't work, why ? ``` arr[0]="XX" arr[1]="wXyz" arr[2]="ABC" arr[3]="XX" ```

Original source