• awk内引用shell变量【自己手动加精】


    题目

    [root@localhost ~]# cat 1.txt
    iii
    sss
    ddd
    

      

    执行命令

    [root@localhost ~]# A=0
    [root@localhost ~]# awk '{print $$A}' 1.txt
    iii
    sss
    ddd
    

      

    按道理应该是语法错误,正确的应该这样写

    awk '{print $'$A'}' 1.txt
    

      

    在awk中,$是有特殊含义的字符,会被解释成字段操作符

    awk '{print $$A}' 相当于 awk '{print $($A)}' => awk '{print $0}'

    ================================================================
    为了跟清楚的解释,新建urfile,这样就能看出区别了

    [root@localhost ~]# cat urfile
    iii 1
    sss
    ddd
    [root@localhost ~]# awk '{print $$A}' urfile
    iii 1
    sss
    ddd
    [root@localhost ~]# cat urfile
    1 iii
    sss
    ddd
    [root@localhost ~]# awk '{print $$A}' urfile
    1
    sss
    ddd
    

      

    再看awk '{print $$A}' 相当于 awk '{print $($A)}'这句话,就能理解了

    这里($A)解释为第A个字段,而A在awk中是未设置的变量,数值为0

    [root@localhost ~]# echo | awk '{print A}'
    
    [root@localhost ~]# echo | awk '{print A+0}'
    0
    

      

    $0在awk中表示整行,而awk又是行处理器
    所以得出
    $$A => $($A) => $($0) => $("1 iii")
    这个结果

    最后$("1 iii") => $1

    [root@localhost ~]# awk '{print $"1 iii"}' urfile 
    1
    sss
    ddd
    [root@localhost ~]# awk '{print $1 iii}' urfile 
    1
    sss
    ddd
    

      



    在awk中,"1 iii",被分割成'1','iii'两段,
    空格(space) 是 awk 的字符串连接操作符。

    print $1 iii       #表示将$1跟iii连接打印出来
    iii,没有引号就是当作变量名

    [root@localhost ~]# awk '{print iii}' urfile 
    
    
    
    [root@localhost ~]# awk '{print $1 12}' urfile 
    112
    sss12
    ddd12
    [root@localhost ~]# awk '{print $iii iii}' urfile 
    1 iii
    sss
    ddd
    [root@localhost ~]# awk '{print $iii "iii"}' urfile 
    1 iiiiii
    sssiii
    dddiii
    [root@localhost ~]# awk -viii=1 '{print $1 iii}' urfile 
    11
    sss1
    ddd1
    [root@localhost ~]# awk -viii=iii '{print $1 iii}' urfile 
    1iii
    sssiii
    dddiii
    

      

    连起来理解就是[print $1 iii] print$1空格(连接符)iii(awk内置变量,未设置,为空)

    最后南宁@黑哥给了关于awk中变量的理解

    [root@localhost ~]# echo "foo bar foobar" | awk '{A=1;print "A:"A;print "$A: "$A}'
    A:1
    $A: foo
    

      



    感谢南宁@黑哥的指导

  • 相关阅读:
    点击图片等比缩放
    C# 使用 NPOI 库读写 Excel 文件
    vue url生产二维码
    centos Linux 同步Windows 时间
    centos 搭建 docker sentry
    centos 安装 pip
    webpack 提升90%的构建速度 HardSourceWebpackPlugin
    webpack 原生分析
    webpack 分析
    nodejs——js 实现webSocket 兼容移动端
  • 原文地址:https://www.cnblogs.com/irockcode/p/6984565.html
Copyright © 2020-2023  润新知