#!/bin/bash gen_index() { [ -f english.txt ] || \ curl -fsSL https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/english.txt -o english.txt idx=0 while IFS= read -r line; do bin=$(echo "obase=2;$idx" | bc) bin=$(printf "%011s" "$bin" | tr ' ' '0') dec=$(printf "%04d" $((idx + 1))) hex=$(printf "%03x" $((idx + 1))) printf "%s %s %s %s\n" "$bin" "$dec" "$hex" "$line" ((idx++)) done < english.txt > english-index.txt rm english.txt } type="dec" qr=0 rev=0 USAGE="Usage: $0 [-b|-h|-d|-w|-r] [-q] " [ -f english-index.txt ] || gen_index while getopts "bhdwqr" opt; do case "$opt" in b) type="bin" ;; h) type="hex" ;; d) type="dec" ;; w) type="wrd" ;; r) rev=1 ;; q) qr=1 ;; *) echo "$USAGE"; exit 1 ;; esac done shift $((OPTIND-1)) input="$1" buffer="" if [ -z "$input" ]; then echo "$USAGE" exit 1 fi case "$type" in bin) block=11; index_field=1 ;; dec) block=4; index_field=2 ;; hex) block=3; index_field=3 ;; wrd) block=4; index_field=4 ;; esac if [ "$rev" -eq 1 ]; then read -ra arr <<< "$input" for element in "${arr[@]}"; do prefix="${element:0:4}" line=$(awk -v pfx="$prefix" '$4 ~ "^"pfx { print; exit }' english-index.txt) if [[ -n "$line" ]]; then field=$(echo "$line" | awk -v idx="$index_field" '{print $idx}') buffer+="${field:0:$block} " else echo "Unknow word: $element" fi done else clean=$(echo "$input" | tr -cd '[:alnum:]') for ((i=0; i<${#clean}; i+=block)); do key="${clean:i:block}" word=$(awk -v k="$key" -v f="$index_field" -v b="$block" '{ prefix = substr($f, 1, b) if (prefix == k) {print $4; exit} }' english-index.txt) if [ -n "$word" ]; then buffer+="$word " fi done fi if [ "$qr" -eq 1 ]; then qrencode -t ansiutf8 "$buffer" fi echo "$buffer"