gawk を用いたカナ半角->カナ全角, 全角英数->半角英数変換。
kana_han2zen.gawk
#!/usr/bin/gawk -f
#gawk用
#半角カナ to 全角カナ and 全角英数 to 半角英数
#牛丼短観用
#
#ex. $ ./kana_hantozen.gawk test.txt
#参考:http://www.geocities.jp/cygnus_odile/tategaki/script-sjis/han2zen.awk.txt
#
BEGIN{
split("0123456789", az, "");
split("0123456789", ah, "");
split("ABCDEFGHIJKLMNOPQRSTUVWXYZ", bz, "");
split("ABCDEFGHIJKLMNOPQRSTUVWXYZ", bh, "");
split("・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン", kh, "");
split("・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン", kz, "");
split("ウカキクケコサシスセソタチツテトハヒフヘホ", khb, ""); #濁点可能性文字
split("ヴガギグゲゴザジズゼゾダヂヅデドバビブベボ", kzd, "");
split("ハヒフヘホ", hhm, ""); #半濁点可能性文字
split("パピプペポ", kze, "");
}
#main
{
for(cnt in az) gsub(az[cnt],ah[cnt]); #全角英数to半角
for(cnt in bz) gsub(bz[cnt],bh[cnt]); #全角英数to半角
for(cnt in khb) gsub(khb[cnt] "゙",kzd[cnt]); #半角濁点文字to全角
for(cnt in hhm) gsub(hhm[cnt] "゚",kze[cnt]); #半角パ行to全角
for(cnt in kh) gsub(kh[cnt],kz[cnt]); #han2zen
print; #出力
}
#用法例
$ gawk -V
GNU Awk 4.1.4, API: 1.1 (GNU MPFR 3.1.5, GNU MP 6.1.2)
(略)
$ echo "
|すき家|茨城県|すき家 イオンモール下妻店|
|すき家|岡山県|すき家 53号岡山IC店|
|すき家|岡山県|すき家 イオンモール津山店|
|すき家|沖縄県|すき家 イオン那覇店|
|すき家|岩手県|すき家 イオンモール盛岡南店|
|すき家|宮城県|すき家 イオンタウン佐沼店|
|すき家|宮城県|すき家 フォレオせんだい宮の杜店|
|すき家|宮城県|すき家 仙台クリスロード店|" >tmp
$ ./kana_han2zen.gawk tmp
|すき家|茨城県|すき家 イオンモール下妻店|
|すき家|岡山県|すき家 53号岡山IC店|
|すき家|岡山県|すき家 イオンモール津山店|
|すき家|沖縄県|すき家 イオン那覇店|
|すき家|岩手県|すき家 イオンモール盛岡南店|
|すき家|宮城県|すき家 イオンタウン佐沼店|
|すき家|宮城県|すき家 フォレオせんだい宮の杜店|
|すき家|宮城県|すき家 仙台クリスロード店|
参考: http://www.geocities.jp/cygnus_odile/tategaki/script-sjis/han2zen.awk.txt