シェルワンライナー160本ノック問題142
問題142 ビットスクワッティング
perlを使う段になると途端にダメになる。なかなか新しいことが頭に入ってこない感じがする。まだ若いのに...
解答例は
printf 'blog.ueda' | xxd -b -c1 | awk '{printf $2}' | perl -ne 'print "$_\n" x length($_)' | awk -F '' -v OFS='' '{$NR=!$NR;print}' | perl -nle 'print pack("B*", $_)' | grep '^[a-z\.]*$' | xargs
となる。まずxxdで2進数に変換する。-bオプションで2進数にしている。そのあと文字列の2進数表現を改行なしで出力し、perlで2進数の長さ分だけ行を複製する。そしてawkでビットを1つずつ反転させて、perlでまた2進数から文字に戻してgrepで文字でないものを振るい落として解答となる。xxdで戻せないのかと思ったが戻すオプションである-rは16進数でないと使えなかった。