免费注册 查看新帖 |

Chinaunix

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

新手请教:一个awk脚本的执行情况~~~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-09 23:46 |只看该作者 |倒序浏览
[root@localhost ch09]# more capsformatch
awk '#lower
BEGIN{
        upper ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lower ="abcdefghijklmnopqrstuvwxyz"
}

#for all lines
{
        while(match($0,/[A-Z]+/))
                for(x=RSTART;x<RSTART+RLENGTH;++x){
                        CAP = substr($0,x,1) #取得要处理的行里的大写字母
                        CHAR = index(upper,CAP) #取得大写字母在upper字符串里面的位置数字,应该是最左边从1开始数。
                        gsub(CAP,substr(lower,CHAR,1)) #取得和upper字符串里和lower里相同位置的小写字母,全部替换。
                }
        print $0
}' $*


运行以后出现问题:

  1. [root@localhost ch09]# more test
  2. Every NOW and then, a WORD I type appears in CAPS.
  3. [root@localhost ch09]# ./capsformatch test
  4. aaaaa aaa aaa aaaa, a aaaa a aaaa aaaaaaa aa aaaa.
  5. [root@localhost ch09]# more test2
  6. Root and
  7. [root@localhost ch09]# ./capsformatch test2
  8. aaaa aaa

复制代码


请教各位!

谢谢!

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2007-05-10 09:16 |只看该作者
一点小小的改动,测试可以的
$ cat capsformatch.awk
#!/usr/bin/awk
BEGIN{
        upper ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lower ="abcdefghijklmnopqrstuvwxyz"
}

{
        while(match($0,/[A-Z]+/))
                for(x=RSTART;x<RSTART+RLENGTH;++x){
                        CAP = substr($0,x,1) #取得要处理的行里的大写字母
                        CHAR = index(upper,CAP) #取得大写字母在upper字符串里面的位置数字,应该是最左边从1开始数。
                        gsub(CAP,substr(lower,CHAR,1)) #取得和upper字符串里和lower里相同位置的小写字母,全部替换。
                }
        print $0
}
$ more test.txt
Every NOW and then, a WORD I type appears in CAPS.
$ awk -f capsformatch.awk test.txt
every now and then, a word i type appears in caps.

论坛徽章:
0
3 [报告]
发表于 2007-05-10 10:10 |只看该作者
楼主何不用tr来做这种功能 tr [A-Z] [a-z]
当然如果想拿awk练手,另当别论

论坛徽章:
0
4 [报告]
发表于 2007-05-10 14:35 |只看该作者
原帖由 ly5066113 于 2007-5-10 09:16 发表
一点小小的改动,测试可以的
$ cat capsformatch.awk
#!/usr/bin/awk
BEGIN{
        upper ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lower ="abcdefghijklmnopqrstuvwxyz"
}

{
    ...


谢谢回复!


不过能不能把你所说的改动指出来?

难道是你用了awk脚本方式执行,而我的那个是用了普通脚本执行?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2007-05-10 15:24 |只看该作者
export LANG=C
再try1try

论坛徽章:
0
6 [报告]
发表于 2007-05-10 23:53 |只看该作者
谢谢waker!

用了你的方法以后脚本执行成功了。。。

我是redhat9默认的:
[root@localhost ch09]# echo $LANG
zh_CN.GB18030

不知道这个为什么非要设置成C,
从google 上也没搜到什么,在CU找到了一个帖子:
http://bbs.chinaunix.net/viewthread.php?tid=816205
netsure:
C--对英文 ASCII 环境

设置英文环境:
export LC_ALL=en_US
export LANG=en_US


不知道那里有这方面的资料,难道awk和c很相似,也都采用ASCII标准?(瞎猜的~)

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2007-05-11 06:50 |只看该作者
原帖由 waker 于 2007-5-10 15:24 发表
export LANG=C
try1try


good good study, day day up.

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2007-05-11 09:10 |只看该作者
原帖由 yuyuyou 于 2007-5-10 23:53 发表
谢谢waker!

用了你的方法以后脚本执行成功了。。。

我是redhat9默认的:
[root@localhost ch09]# echo $LANG
zh_CN.GB18030

不知道这个为什么非要设置成C,
从google 上也没搜到什么,在CU找到了一个 ...

准确的说是 LC_COLLATE变量在起作用,它影响字符在不同语言环境中的排序,比如正则表达式中的[]字符集在不同语言环境中包含不同的字符,又如sort在不同语言环境会取得不同结果

ref:

http://docs.sun.com/app/docs/doc ... d77?l=zh&a=view
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP