#!/bin/zsh fln=($@) flc=(${fln}) idc="0" typeset -A fls for i in $flc; do id="$(grep -m 1 -oP '(?<=^[mM]essage-[iI][dD]\:\ \<).*(?=\>)' $i)" if [ ! -z "$id" ]; then fls[$i]="$id" idc=$(( ${idc} + 1 )) printf '%.40s: %20s\r' 'Message-IDs collected' "${idc}/${#fln}" >&2 fi done printf '\n' >&2 typeset -A idfcnt for v in $fls; do idfcnt[$v]="$(( ${idfcnt[$v]:-0} + 1 ))" done fdc="0" for k v in ${(kv)idfcnt}; do if [ "$v" -gt 1 ]; then FL=() while true; do FN="${(k)fls[(r)$k]}" if [ ! -z "$FN" ]; then unset "fls[$FN]" FL+=("$FN") else break fi done printf '%s\n' "$FL" fdc=$(( ${fdc} + ${#FL} )) printf '%.40s: %20s\r' 'Message-ID duplicates' "${fdc}/${idc}" >&2 fi done [ "$fdc" -gt 0 ] && printf '\n' >&2