arrays - 搜索重复元素数组

标签 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"

使用相同的代码,这个不起作用,为什么?

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

最佳答案

要检查重复项,此代码要简单得多,并且在两种情况下都有效:

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

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

编辑:要打印重复项,请使用以下 awk:

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

如果一行还不是 seen 数组的一部分,则 Awk 命令将存储在数组 seen 中,然后移动到下一行。最后的 1 仅打印那些重复的行。

关于arrays - 搜索重复元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22055238/

相关文章:

arrays - 长数组 VBA 问题

sql - 显示列中具有不匹配值的记录 SQL Server

c++ - OpenCV中数据库视频匹配的实现帮助

c - Top N 记录排序以仅返回排序数组中特定范围内的数字

c - 数组下标的无效类型 int[int]

python - 高效的二维数组处理

python - 从python中的字符串中删除连续的重复字符

bash - Bitbucket 管道 : echo environment variable

regex - 如何捕获正则表达式的结果并替换 bash 中的模式

bash - 在bash脚本中使用docker exec