#! /usr/bin/gawk -f BEGIN { k = 0; nk = length(key); alpha = "abcdefghijklmnopqrstuvwxyz"; if (decode == 1) { dir = 25; } else { dir = 1; } } { ns = length($0); for (i=1; i<=ns; i++) { cp = substr($0,i,1); ip = index(alpha, cp) - 1; if (ip >= 0) { ck = substr(key,k+1,1); ik = index(alpha, ck) - 1; ip = (ip + dir*ik) % 26; cp = substr(alpha, ip+1, 1); k = (k + 1) % nk; } printf "%s", cp; } printf "\n"; }