use*_*499 4 arrays bash duplicates
这一项工作:
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"
Run Code Online (Sandbox Code Playgroud)
使用相同的代码,这个不起作用,为什么?
arr[0]="XX"
arr[1]="wXyz"
arr[2]="ABC"
arr[3]="XX"
Run Code Online (Sandbox Code Playgroud)
要检查重复,此代码要简单得多,并且适用于两种情况:
uniqueNum=$(printf '%s\n' "${arr[@]}"|awk '!($0 in seen){seen[$0];c++} END {print c}')
(( uniqueNum != ${#arr[@]} )) && echo "Found duplicates"
Run Code Online (Sandbox Code Playgroud)
编辑:要打印重复项,请使用此 awk:
printf '%s\n' "${arr[@]}"|awk '!($0 in seen){seen[$0];next} 1'
Run Code Online (Sandbox Code Playgroud)
seen如果一行还不是seen数组的一部分,则awk 命令将存储在数组中,然后移动到下一行。1最后只打印那些重复的行。