免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: zen
打印 上一主题 下一主题

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2003-02-18 13:06 |只看该作者

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

高!实在高!

其实用awk也能实现,但非常非常罗嗦,跟laoxia一样的思路。
思路是:利用sprintf的格式输出,建立一字典数组,这数组以a-z,A-Z为数组标识,其ASCII值为数组单元值,然后根据数组来对比,这样就可以加减乘除计算了。
awk '{ FS=""; for(i=65;i<=90;i++) {temp=sprintf("%c",i);dic[temp]=i;} for(i=97;i<=122;i++) {temp=sprintf("%c",i);dic[temp]=i;};for (i=1;i<=NF;i++){if(dic[$i]>=97 &amp;&amp; dic[$i]<=109)printf("%c",dic[$i]+13);else if (dic[$i]>=110 &amp;&amp; dic[$i]<=122)printf("%c",dic[$i]-13);else if(dic[$i]>=65 &amp;&amp; dic[$i]<=77)printf("%c",dic[$i]+13);else if(dic[$i]>=78 &amp;&amp;  dic[$i]<=90)printf("%c",dic[$i]-13);else printf("%s",$i);}print(""}' filename

不用每次遍历数组,只要判断从文件里读出来的字符$i对应的dic[$i]的值,并以printf("%c",dic[$i])输出。


但这有个致命的弱点,因为awk切割字段的时候,每个记录的字段数不能超过100,超过则不进行切割,所以这东东只能运行少于每句少于100字符的转换。

论坛徽章:
0
12 [报告]
发表于 2003-02-18 15:20 |只看该作者

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP