日期:2014-05-16  浏览次数:20665 次

求一条awk的语句
想将第一个9替换为0;数据如下:
SELECT 'AFT_TRD_OPT_LOG', 'SETTBAK_AFT_TRD_OPT_LOG', '9', 'PRESETT_AFT_TRD_OPT_LOG', '9', '', '', '' FROM BACKUP_TABLE WHERE 1 = 1;
替换后的结果为;
SELECT 'AFT_TRD_OPT_LOG', 'SETTBAK_AFT_TRD_OPT_LOG', '0', 'PRESETT_AFT_TRD_OPT_LOG', '9', '', '', '' FROM BACKUP_TABLE WHERE 1 = 1;

------解决方案--------------------
#!/bin/sh
awk 'BEGIN{FS=" +";ORS=" ";flag=0}{
            while(++c<=NF)
            {
                if($c~/9/&&flag==0)
                {
                    gsub(9,0,$c);
                    print $c
                    flag=1;
                }
                else
                    print $c
            }
            print "\n"
}' 1.txt


1.txt :
SELECT 'AFT_TRD_OPT_LOG', 'SETTBAK_AFT_TRD_OPT_LOG', '9', 'PRESETT_AFT_TRD_OPT_LOG', '9', '', '', '' FROM BACKUP_TABLE WHERE 1 = 1;

执行结果
SELECT 'AFT_TRD_OPT_LOG', 'SETTBAK_AFT_TRD_OPT_LOG', '0','PRESETT_AFT_TRD_OPT_LOG', '9', '', '', '' FROM BACKUP_TABLE WHERE 1 = 1;