我的文件如下:
__1 AAA =====
__2 BBB =====
__3 CCC =====
_10 DDD =====
_11 BBB =====
_14 EEE =====
_15 BBB =====
_20 CCC =====
下划线试图在我的文件中表示空格(空白)。
因为三行带有模式BBB
,两行带有模式CCC
,我需要在它们的左侧保存伴随它们的数字(如果可能,将它们保存在不同的变量中),但是最高数字(不是最低数字)。因此,数字将是(我文件的输出):
11
15
20
(请注意,对于所有其他寄存器,只有一个寄存器,因此我不需要任何编号)
答案 0 :(得分:1)
#!/usr/bin/env bash
case $BASH_VERSION in ''|[123].*) echo "ERROR: Bash 4.0 required" >&2; exit 1;; esac
declare -A highest=( ) count=( )
while read -r num pat _; do : num="$num" pat="$pat"
(( ++count[$pat] ))
if [[ -z ${highest[$pat]} ]] || (( num > ${highest[$pat]} )); then
highest[$pat]=$num
fi
done
readarray -t sorted_keys < <(printf '%s\n' "${!highest[@]}" | sort)
for key in "${sorted_keys[@]}"; do : key="$key"
if (( ${count[$key]} > 1 )); then
printf '%s\n' "${highest[$key]}"
fi
done