Created
July 17, 2014 06:20
-
-
Save puriketu99/4a19a7f2ece6130b5076 to your computer and use it in GitHub Desktop.
日本語とかの全角を半角に変換するawk ref: http://qiita.com/puriketu99/items/116e7536300781ceb17a
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# zen2han.awk | |
# 全角 英数字記号 を半角文字に変換する | |
# 全角カタカナ等も対象とする。 | |
BEGIN{ | |
split("0123456789", az, ""); | |
split("0123456789", ah, ""); | |
split("ABCDEFGHIJKLMNOPQRSTUVWXYZ", bz, ""); | |
split("ABCDEFGHIJKLMNOPQRSTUVWXYZ", bh, ""); | |
split("abcdefghijklmnopqrstuvwxyz", cz, ""); | |
split("abcdefghijklmnopqrstuvwxyz", ch, ""); | |
split(" ~’”:;[]+-*/=!@#$%^&*()_|.,<>?¥", dz, ""); | |
split(" ~'\":;[]+-*/=!@#$%^&*()_|.,<>?\\", dh, ""); # \ は重ねて記述、 | |
split("。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜", kz, ""); | |
split("。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚", kh, ""); | |
split("ウカキクケコサシスセソタチツテトハヒフヘホ", kzb, ""); | |
split("ヴガギグゲゴザジズゼゾダヂヅデドバビブベボ", kzd, ""); | |
split("ハヒフヘホ", kzc, ""); | |
split("パピプペポ", kze, ""); | |
#for( e in dh){ | |
# if(dh[e]=="(") dh[e] = "\\("; | |
# if(dh[e]==")") dh[e] = "\\)"; | |
# if(dh[e]==".") dh[e] = "\\."; | |
# if(dh[e]=="|") dh[e] = "\\|"; | |
# if(dh[e]=="^") dh[e] = "\\^"; | |
# if(dh[e]=="$") dh[e] = "\\$"; | |
# if(dh[e]=="[") dh[e] = "\\["; | |
# if(dh[e]=="]") dh[e] = "\\]"; | |
#} | |
} | |
{ # メインルーチン # | |
for(e in az) gsub(az[e],ah[e]); # 全角数字を半角に変換 | |
for(e in bz) gsub(bz[e],bh[e]); # 全角英字を半角に変換(大文字) | |
for(e in cz) gsub(cz[e],ch[e]); # 全角英字を半角に変換(小文字) | |
for(e in dz) gsub(dz[e],dh[e]); # 全角記号を半角記号へ変換 | |
for(e in kz) gsub(kz[e],kh[e]); # 全角カナを半角カナへ変換 | |
for(e in kzd) gsub(kzd[e],kzb[e] "゙"); # 半角カナ + ゛を濁点付の半角カナへ変換 | |
for(e in kze) gsub(kze[e],kzc[e] "゚"); # 半角カナ + ゜を半濁点付の半角カナへ変換 | |
print; | |
} | |
# gsub(reg, s [, t]) において、 | |
# 置換テキスト s では、 & は実際にマッチしたテキストで置き換えられる。 | |
# \& を使用するとリテラルの & を得ることができます。 | |
# さらに、"" 内では、"\\" → '\'となるので、 \\ を重ねて記載する必要がある。 | |
# | |
# 例: gsub(/&/,"\\&"); | |
# | |
# sub() や gensub()でも同様。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment