免费注册 查看新帖 |

Chinaunix

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

[文本处理] AWK替换字符串问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-26 16:09 |只看该作者 |倒序浏览
本帖最后由 吾非真好汉 于 2013-06-26 16:10 编辑

问题现状:
sqldr导入数据后有个bad文件,sqlldr失败生成bad文件的原因是数据库里原始数据某个字段最后一位存在半个汉字的乱码,因此打算通过awk来查找并替换掉乱码,
尝试awk命令如下:
awk -F "分隔符" 'BEGIN {
       for (i=0;i<255;i++)
        a[sprintf("%c",i)]=i;
     } //生成0-255的asc码映射
   {
        for(i=1;i<=NF;i++)  //按分隔符遍历字段
      {
            ch=0;                                    
            for(s=1;s<=length($i);s++)   //遍历字段内字符            
         {                                       
               if(a[substr($i,s,1)]>128  //累计asc码大于128的字符数
           {            
                   ch++;                                
                }
             }                                       
           if(ch%2==1) //为奇数,认为此列最后一位为半个汉字的乱码(汉字有两个字符,asc码都大于128)
        {                             
               gsub(/substr($i,s,1)/,"",$i); //替换
        }
        }
        print $0 >>"n00_crm_id_cust_20130606.dat"
     }' n00_crm_id_cust_20130606.bad
      
      
遭遇问题:
gsub(/substr($i,s,1)/,"",$i); //替换
此代码不能如愿替换,因为正则模式里使用了函数、变量,替换时,会拿"substr($i,s,1)"去匹配,而不是函数表达式的值,
请教各们,gsub的正则模式能否使用函数、变量?   如何可能,需要采用什么样的书写格式 ?
如果正则模式不能带变量,那么此功能需求如何实现?
能否在awk命令里使用sed来做替换 ?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2013-06-26 16:12 |只看该作者
回复 1# 吾非真好汉


    gsub(substr(...),"",$i)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP