Skip to content

Instantly share code, notes, and snippets.

@puriketu99
Created July 17, 2014 06:20
Show Gist options
  • Save puriketu99/4a19a7f2ece6130b5076 to your computer and use it in GitHub Desktop.
Save puriketu99/4a19a7f2ece6130b5076 to your computer and use it in GitHub Desktop.
日本語とかの全角を半角に変換するawk ref: http://qiita.com/puriketu99/items/116e7536300781ceb17a
# 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