免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1377 | 回复: 1
打印 上一主题 下一主题

一个awk脚本的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-14 02:05 |只看该作者 |倒序浏览
这个awk脚本是要将输入中的大写字母全部转换为小写字母,但实际运行只可能打出小写字母a,请各位大虾帮忙帮忙分析一下
此外还想问下,这些函数在没有匹配的情况下,默认输出是什么,在错误输入下,默认输出又是什么,谢谢了
awk '
BEGIN{
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lower="abcdefghijklmnopqrstuvwxyz"
}
{
match($0,/[A-Z]+/)
print RSTART,RLENGTH
for(x=RSTART;x<RSTART+RLENGTH;++x){
        cap=substr($0,x,1)
        char=index(upper,cap)
        sub(cap,substr(lower,char,1))
}
print $0
}'
(这个程序是sed&awk一书中一个程序,我稍微做了改动,但并不影响功能)

论坛徽章:
0
2 [报告]
发表于 2007-11-14 08:14 |只看该作者

  1. BEGIN{
  2. upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. lower="abcdefghijklmnopqrstuvwxyz"
  4. }
  5. {
  6. while(match($0,/[[:upper:]]+/)){
  7.         print RSTART,RLENGTH
  8.         for(x=RSTART;x<RSTART+RLENGTH;++x){
  9.                 cap=substr($0,x,1)
  10.                 char=index(upper,cap)
  11.                 sub(cap,substr(lower,char,1))
  12.         }
  13. }
  14. print $0
  15. }
复制代码


注:
match($0,/[A-Z]+/)  在某些locale中,会有行为异常
因此,用[[:upper:]]+来表述比较好,或者,直接用[ABCDEFGHIJKLMNOPQRSTUVWXYZ]+

还有,可能会出现多处有大写字母的情况,因此,需要用一个循环来解决不同位置的大写字母问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP