シェルワンライナー160本ノック問題46
問題46 ルビを付ける
問題のファイルは
https://github.com/shellgei/shellgei160
からダウンロードできる。
mecab に通してやればいいと思ったが出力がタブ区切りになっていることに気が付かず詰まってしまった。
解答例は
mecab -E '' const26.txt | awk -F'[\t,]' '{print $1","$(NF-1)}' | nkf -h | sed -E 's/(.*),(.*)\1/(\2)\1/' | sed 's/(\**)//' | paste -sd ''
となる。タブ区切りとカンマ区切りを区切り文字として指定することで必要なところを抜き出せるようにしている。抜き出した後は必要に応じてカタカナをひらがなに直してから、sed でふりがなを振っている。ふりがなを振る際の処理は、例えば「有する, ゆうする」という風に抜き出してきた文字列に対して「する, ゆうする」だけをマッチさせて「(ゆう)する」という文字列に変換している。そして先に出力されている「有」の後ろに「(ゆう)する」が出力される。あとは整形しているだけである。