シェルワンライナー160本ノック問題85
問題85 文字のバイナリの平均をとる
自分の環境だと絵文字が文字化けして表示されないのでこの問題の扱いにはずいぶん困った。
解答例は
$ echo 🍑 🍓 | xargs -n1 | perl -nlE 'say unpack("H*",$_)' | xargs | awk '{print "obase=16;ibase=16;"toupper("("$1"+"$2")/2")}' | bc | perl -nlE 'say pack("H*",$_)'
となる。まず絵文字を1行ずつにわけて出力して、それから perl で16進数のUTF-8に変換している。そのあとまたまとめて1行に出力しなおして awk で処理しやすいようにしている。 awk では bc で処理する前準備としてダブルクォートによるエスケープを用いながら入出力に16進数を指定して16進数の足し算の式を作成している。bcで計算した後はまた perl で16進数を絵文字に戻している。