シェル芸でアラビア数字を漢数字に変換する

ふとした思いつきで、アラビア数字から漢数字への変換をコンソール上でできないかなーと思ったのでやってみることにした。
以下のように、まず一度sedで全部漢数字に切り替えて、その後は各桁に応じて漢字の置き換えをしていくことで対応できるようだ。

echo 123456789 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
Sponsored Links

[root@BS-PUB-CENT7-01 ~]# echo 123456789 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
一億二千三百四十五万六千七百八十九
[root@BS-PUB-CENT7-01 ~]# echo 12345678 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
千二百三十四万五千六百七十八
[root@BS-PUB-CENT7-01 ~]# echo 1234567 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
百二十三万四千五百六十七
[root@BS-PUB-CENT7-01 ~]# echo 123456 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
十二万三千四百五十六
[root@BS-PUB-CENT7-01 ~]# echo 12345 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
一万二千三百四十五
[root@BS-PUB-CENT7-01 ~]# echo 1234 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
千二百三十四
[root@BS-PUB-CENT7-01 ~]# echo 123 | sed 'y/0123456789/〇一二三四五六七八九/' | grep -o . | tac | paste - <(echo {十,百,千,万,十,百,千,億} | fmt -1 | cat <(echo) -) | grep -vE ^$'\t' | tac | sed -zr 's/(\t|\n)//g'| perl -lpe 's/一(?!($|万|億))//g;s/〇(?!$)//g'
百二十三

 

普段、こんなん使うか?って言われたら多分使わない気がするのだけど、まぁこんなこともやろうと思えばできるんだなーということで(´・ω・`)。

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*