fork download
  1. #!/bin/bash
  2.  
  3. awk -v from="foo" -v to="bar" '
  4. BEGIN {
  5. if (length(from)!=length(to)) {
  6. print "length mismatch" >"/dev/stderr"
  7. exit(42)
  8. }
  9. n = length(from)
  10. for(i=1; i<=n; i++) {
  11. f[i] = tolower(substr(from, i, 1))
  12. g[i] = toupper(substr(from,i, 1))
  13. t[i] = tolower(substr(to, i, 1))
  14. u[i] = toupper(substr(to, i, 1))
  15. }
  16. for(i=0; i<2**n; ++i) {
  17. a = b = ""
  18. q = i
  19. k = 2**(n-1)
  20. for(j = 1; j<=n; j++) {
  21. c = (q > 0) && (q - k >= 0)
  22. a = a (c ? f[j] : g[j])
  23. b = b (c ? t[j] : u[j])
  24. if (c) q -= k
  25. k = int(k/2)
  26. }
  27. s[a] = b
  28. }
  29. }
  30. { for(r in s) gsub(r, s[r]) } 1'
Success #stdin #stdout 0.01s 5268KB
stdin
I've got my food in your barn
foo foO Foo FOO fOod
stdout
I've got my bard in your barn
bar baR Bar BAR bArd