/ / пошук дублікатів масивів елементів - масиви, bash, дублікати

пошук дублікатів масивів елементів - масиви, bash, дублікати

Це одна робота:

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 "%sn" "${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"

з тим же кодом, це не працює, чому?

arr[0]="XX"
arr[1]="wXyz"
arr[2]="ABC"
arr[3]="XX"

Примітка: я починаю баш з недовго

Відповіді:

3 для відповіді № 1

Для перевірки дублікатів цей код набагато простіший і працює в обох випадках:

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

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

EDIT: Для друку дублікатів використовуйте цей awk:

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

Команда Awk зберігає в масиві seen якщо лінія не є частиною seen масив і наступний перехід до наступного рядка. 1 в кінці друкує лише ті рядки, які є дублікатами.