С помощью awk вы можете сказать:
awk -F':' 'FNR==NR {a[$1]=$2; next} {print $1":"a[$1]}' dictionary.txt silly_log.txt
, который выводит:
0:idle
1:receiving data
5:processing data
0:idle
1:receiving data
7:parity error
1:receiving data
5:processing data
0:idle
-F':'
устанавливает разделитель полей на ':'
. FNR==NR
соответствует, если и только если первый файл аргумента dictionary.txt
прочитан, то он создает карту. - Фрагмент
{print ..}
выполняется, пока читается второй файл аргумента, затем онинтерпретирует коды к текстам на основе карты.
РЕДАКТИРОВАТЬ
В качестве альтернативы, вы также можете просто сказать с помощью bash:
declare -a a
while IFS=: read -r code str; do
a["$code"]="$str"
done < "dictionary.txt"
while read -r code; do
printf "%d:%s\n" "$code" "${a[$code]}"
done < "silly_log.txt"