awk引发的血案

  1. ubuntu14.04的服务器上awk版本怪异,不是gnu版本,match函数功能有限
    centos的ecs上可以用,以后逐渐放弃ubuntu不友好的awk环境。

  2. 在ngip上安装了: apt-get install gawk 这才确保如下测试通过:
    awk -V; str="s1:12,s2:1";echo $str|awk '{match($0,/(s1:[^,]*?),/,a);print $0,a[1]}'

  3. 2的脚本可以测试awk版本是否是我们想要的gnu版本,如果不是,它不会输出gnu awk的版本信息和执行命令的结果: s1:12,s2:1 s1:12

  4. 本地都写好了awk和bash脚本可以统计一个月的活动的s1的信息。结果本地没有mysql这个可执行文件,无法获取到活动名称。
    于是去服务器ngip上去运行。
    结果awk的命令不执行,显示行数也是用awk函数写的,结果为空

  5. 开始严重怀疑awk版本问题,最后装了gnu awk还是不行,版本低了?

  6. 然后想起来上次做大数据的日志提取用了awk的match函数,上ecs看了一眼,人家是centos,gnu awk版本和ngip一样的啊,为何人家可以你不可以?

  7. 于是开始调试bash脚本发现自己被下面的函数给坑死了:
    alias lines='awk "END{print NR}"'
    为何这样设置单双引号呢?
    alg lines你就会看到这样不会显示的难看的转义,但是恰恰是因为这样,导致这个函数在ngip上的bash脚本中就是执行不出来结果!!
    最后必须改成这样:
    alias lines="awk 'END{print NR}'"

  8. 执行后发现显示活动名称有问题,修改如下,每次指定活动id:
    done< <(echo "select campaign_name from tab_campaign where campaign_id=${file/_${type}/};"|${COMMAND1})

你可能感兴趣的:(awk引发的血案)