カタカナをアルファベットに変換2(修正版)

修正版:

次のルールでカタカナをアルファベットに変換
カタカナの「ニ」と漢字の「二」の
違いに注意。

また、アルファベット3文字を優先的に
置換を行う。

katakana.kana

ャ,lya
ュ,lyu
ョ,lyo
ヮ,lwa
ッ,ltu
ヴ,va
ヵ,lka
ヶ,lke
ア,_a
イ,_i
ウ,_u
エ,_e
オ,_o
カ,ka
キ,ki
ク,ku
ケ,ke
コ,ko
サ,sa
シ,si
ス,su
セ,se
ソ,so
タ,ta
チ,ti
ツ,tu
テ,te
ト,to
ナ,na
ニ,ni
ヌ,nu
ネ,ne
ノ,no
ハ,ha
ヒ,hi
フ,hu
へ,he
ホ,ho
マ,ma
ミ,mi
ム,mu
メ,me
モ,mo
ヤ,ya
ユ,yu
ヨ,yo
ラ,ra
リ,ri
ル,ru
レ,re
ロ,ro
ワ,wa
ヲ,wo
ン,nn
ァ,la
ィ,li
ゥ,lu
ェ,le
ォ,lo
ガ,ga
ギ,gi
グ,gu
ゲ,ge
ゴ,go
ザ,za
ジ,zi
ズ,zu
ゼ,ze
ゾ,zo
ダ,da
ヂ,di
ヅ,du
デ,de
ド,do
バ,ba
ビ,bi
ブ,bu
ベ,be
ボ,bo
パ,pa
ピ,pi
プ,pu
ぺ,pe
ポ,po

sedの場合sjisダメ文字の影響でうまくいかないい場合は、以下のrubyをつかう。

上のファイルから置き換えスクリプトを作る
awk

awk -F, 'BEGIN{print "sed \""}{print "s\/"$1"\/"$2"/g"";"}END{print "\""}' ka
takana.kana > kana.sed

sedsjisダメ文字の影響でうまくいかない場合は、以下のrubyをつかう。
ruby -KSとして実行すのがポイント。

例えば
ruby -KS katakanatoalpha.rb

KSで実行する。

!#/bin/ruby -KS
a=File.open(ARGV[0]);a.each{|str|
str=str.gsub(//,"_a")
str=str.gsub(//,"_i")
str=str.gsub(//,"_u")
str=str.gsub(//,"_e")
str=str.gsub(//,"_o")
str=str.gsub(//,"ka")
str=str.gsub(//,"ki")
str=str.gsub(//,"ku")
str=str.gsub(//,"ke")
str=str.gsub(//,"ko")
str=str.gsub(//,"sa")
str=str.gsub(//,"si")
str=str.gsub(//,"su")
str=str.gsub(//,"se")
str=str.gsub(//,"so")
str=str.gsub(//,"ta")
str=str.gsub(//,"ti")
str=str.gsub(//,"tu")
str=str.gsub(//,"te")
str=str.gsub(//,"to")
str=str.gsub(//,"na")
str=str.gsub(//,"ni")
str=str.gsub(//,"nu")
str=str.gsub(//,"ne")
str=str.gsub(//,"no")
str=str.gsub(//,"ha")
str=str.gsub(//,"hi")
str=str.gsub(//,"hu")
str=str.gsub(//,"he")
str=str.gsub(//,"ho")
str=str.gsub(//,"ma")
str=str.gsub(//,"mi")
str=str.gsub(//,"mu")
str=str.gsub(//,"me")
str=str.gsub(//,"mo")
str=str.gsub(//,"ya")
str=str.gsub(//,"yu")
str=str.gsub(//,"yo")
str=str.gsub(//,"ra")
str=str.gsub(//,"ri")
str=str.gsub(//,"ru")
str=str.gsub(//,"re")
str=str.gsub(//,"ro")
str=str.gsub(//,"wa")
str=str.gsub(//,"wo")
str=str.gsub(//,"nn")
str=str.gsub(//,"la")
str=str.gsub(//,"li")
str=str.gsub(//,"lu")
str=str.gsub(//,"le")
str=str.gsub(//,"lo")
str=str.gsub(//,"ga")
str=str.gsub(//,"gi")
str=str.gsub(//,"gu")
str=str.gsub(//,"ge")
str=str.gsub(//,"go")
str=str.gsub(//,"za")
str=str.gsub(//,"zi")
str=str.gsub(//,"zu")
str=str.gsub(//,"ze")
str=str.gsub(//,"zo")
str=str.gsub(//,"da")
str=str.gsub(//,"di")
str=str.gsub(//,"du")
str=str.gsub(//,"de")
str=str.gsub(//,"do")
str=str.gsub(//,"ba")
str=str.gsub(//,"bi")
str=str.gsub(//,"bu")
str=str.gsub(//,"be")
str=str.gsub(//,"bo")
str=str.gsub(//,"pa")
str=str.gsub(//,"pi")
str=str.gsub(//,"pu")
str=str.gsub(//,"pe")
str=str.gsub(//,"po")
str=str.gsub(//,"lya")
str=str.gsub(//,"lyu")
str=str.gsub(//,"lyo")
str=str.gsub(//,"lwa")
str=str.gsub(//,"ltu")
str=str.gsub(//,"va")
str=str.gsub(//,"lka")
str=str.gsub(//,"lke")
puts str}

rubyスクリプトを書くためのsed

$ awk -F, 'BEGIN{print "a=File.open(ARGV[0]);a.each{|str|"}{print "str=str.gsub
(\/"$1"\/,\""$2"\")"}END{print "puts str}"}' katakana.kana > katakana.rb

上のファイルから置き換えスクリプトを作る
awk

awk -F, 'BEGIN{print "sed \""}{print "s\/"$1"\/"$2"/g"";"}END{print "\""}' ka
takana.kana > kana.sed


sedの場合。
rubyスクリプトを書くためのsed

$ awk -F, 'BEGIN{print "a=File.open(ARGV[0]);a.each{|str|"}{print "str=str.gsub
(\/"$1"\/,\""$2"\")"}END{print "puts str}"}' katakana.kana > katakana.rb


デコード
アルファベット→カタカナ
rubyを作るスクリプト

 cat henkan.sh
wk -F, 'BEGIN{print "a=File.open(ARGV[0]);a.each{|str|"}{print "str=str.gsub (\
"$2"\/,\""$1"\")"}END{print "puts str}"}' katakana.kana > katakana.rb
$ cat katakana.rb
a=File.open(ARGV[0]);a.each{|str|

str=str.gsub (/lya/,"")
str=str.gsub (/lyu/,"")
str=str.gsub (/lyo/,"")
str=str.gsub (/lwa/,"")
str=str.gsub (/ltu/,"")
str=str.gsub (/va/,"")
str=str.gsub (/lka/,"")
str=str.gsub (/lke/,"")
str=str.gsub (/_a/,"")
str=str.gsub (/_i/,"")
str=str.gsub (/_u/,"")
str=str.gsub (/_e/,"")
str=str.gsub (/_o/,"")
str=str.gsub (/ka/,"")
str=str.gsub (/ki/,"")
str=str.gsub (/ku/,"")
str=str.gsub (/ke/,"")
str=str.gsub (/ko/,"")
str=str.gsub (/sa/,"")
str=str.gsub (/si/,"")
str=str.gsub (/su/,"")
str=str.gsub (/se/,"")
str=str.gsub (/so/,"")
str=str.gsub (/ta/,"")
str=str.gsub (/ti/,"")
str=str.gsub (/tu/,"")
str=str.gsub (/te/,"")
str=str.gsub (/to/,"")
str=str.gsub (/na/,"")
str=str.gsub (/ni/,"")
str=str.gsub (/nu/,"")
str=str.gsub (/ne/,"")
str=str.gsub (/no/,"")
str=str.gsub (/ha/,"")
str=str.gsub (/hi/,"")
str=str.gsub (/hu/,"")
str=str.gsub (/he/,"")
str=str.gsub (/ho/,"")
str=str.gsub (/ma/,"")
str=str.gsub (/mi/,"")
str=str.gsub (/mu/,"")
str=str.gsub (/me/,"")
str=str.gsub (/mo/,"")
str=str.gsub (/ya/,"")
str=str.gsub (/yu/,"")
str=str.gsub (/yo/,"")
str=str.gsub (/ra/,"")
str=str.gsub (/ri/,"")
str=str.gsub (/ru/,"")
str=str.gsub (/re/,"")
str=str.gsub (/ro/,"")
str=str.gsub (/wa/,"")
str=str.gsub (/wo/,"")
str=str.gsub (/nn/,"")
str=str.gsub (/la/,"")
str=str.gsub (/li/,"")
str=str.gsub (/lu/,"")
str=str.gsub (/le/,"")
str=str.gsub (/lo/,"")
str=str.gsub (/ga/,"")
str=str.gsub (/gi/,"")
str=str.gsub (/gu/,"")
str=str.gsub (/ge/,"")
str=str.gsub (/go/,"")
str=str.gsub (/za/,"")
str=str.gsub (/zi/,"")
str=str.gsub (/zu/,"")
str=str.gsub (/ze/,"")
str=str.gsub (/zo/,"")
str=str.gsub (/da/,"")
str=str.gsub (/di/,"")
str=str.gsub (/du/,"")
str=str.gsub (/de/,"")
str=str.gsub (/do/,"")
str=str.gsub (/ba/,"")
str=str.gsub (/bi/,"")
str=str.gsub (/bu/,"")
str=str.gsub (/be/,"")
str=str.gsub (/bo/,"")
str=str.gsub (/pa/,"")
str=str.gsub (/pi/,"")
str=str.gsub (/pu/,"")
str=str.gsub (/pe/,"")
str=str.gsub (/po/,"")
puts str}