gr8のgrepメソッドはlazyでgrepコマンドとawkを合わせた挙動を同時に実行できます。
$ ls | gr8 'grep(/(.+)(\.png)$/) {|s| printf "cp %16s %16s", "#{$1}.png", "img/#{$1.upcase}.jpg"}' cp ceo.png img/CEO.jpg cp system_sol.png img/SYSTEM_SOL.jpg
$ ls | gr8 'grep(/(.+)(\.png)$/) {|s| printf "cp %16s %16s", "#{$1}.png", "img/#{$1.upcase}.jpg"}' | sh $ ls img/ CEO.jpg SYSTEM_SOL.jpg
残念ながら、以下のようにLazyになってるので……後付けのwith_indexやwith_objectはうまく動かないようです
$ ls | gr8 'grep(/(.+)(\.png)$/).class' Enumerator::Lazy