题目

[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

  

感谢南宁@黑哥的指导

awk内引用shell变量【自己手动加精】的更多相关文章

  1. awk中引用shell变量的方法

    1.通过命令行参数定义变量时引用: awk -v awk变量名= shell变量名 #!/bin/bash var4bash=test awk -v var4awk="$var4bash&q ...

  2. awk中引用shell变量执行替换的脚本

    遇到问题: 现在有两个脚本,我想 将file1中的内容按file2来匹配 [root@154 home]# cat file1 3-1-1 POTV=1,POTA=0,POTP=2 1-4-76 PO ...

  3. awk中使用shell变量

    方法:使用-v参数. 对于多个shell变量使用多个-v 有个关于shell变量中的空格问题:

  4. 正则表达式中引用shell变量

    注意,是用单引号包含双引号来引用变量 > MAPPING_ID_PO="000001:AP1-TU1000002:AP1-TU2000003:AP1-TU3000004:AP1-TU4 ...

  5. javascript深入理解js闭包【手动加精】

    http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.   一.变量的作用 ...

  6. awk使用shell变量

    awk使用shell变量  (可以计算浮点数) 其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time=&qu ...

  7. awk引用外部变量及调用系统命令方法

    目标:想用awk与scp命令批量传送文件 前提:先搭好主机间的免密登陆环境(参考:http://www.cnblogs.com/tankaixiong/p/4172942.html) 实现脚本方法: ...

  8. Shell awk文本处理,shell脚本编写

    Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...

  9. linux中shell变量$#,$@,$0,$1,$2的含义

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

随机推荐

  1. JS中的几种函数

    函数可以说是js中最具特色的地方,在这里我将分享一下有关函数的相关知识: 包装函数:        (function foo(){...})作为函数表达式意味着foo只能在...所代表的位置中被访问 ...

  2. 分分钟带你玩转 Web Services【2】CXF

    在实践中一直在使用 JAX-WS 构建 WebService 服务,服务还是非常稳定.高效的. 但还是比较好奇其他的 WebService 开源框架,比如:CXF/Axis2/Spring WS等. ...

  3. add,update,list.jsp源码

    add:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncod ...

  4. Spring+SpringMvc+Mybatis 框架的搭建(二)

    4.4 mybatis-config.xml 这部分可以配置也可以不配置. <?xml version="1.0" encoding="UTF-8" ?& ...

  5. springmvc 导出excel

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  6. oracle 12c 新特性之(相同字段上的多重索引、ddl 日志、限制PGA的大小、分页查询)

    1. 相同字段上的多重索引   在Oracle 12c R1之前,一个字段是无法以任何形式拥有多个索引的.或许有人会想知道为什么通常一个字段需要有多重索引,事实上需要多重索引的字段或字段集合是很多的. ...

  7. oracle的神奇化学反应(行转列+获取表字段)

    橘子+汽水=橘子汽水,∑(゚Д゚ノ)ノ好无聊!!! 火鸡+烤架=烤火鸡,ლ(´ڡ`ლ)还不错. wm_concat()+表字段查询=(✪ω✪)会是啥呢? wm_concat()函数,该函数可以把列值以 ...

  8. 解决xmapp中Apache端口号占用问题

    [原]解决 "安装xmapp后Apache不能正常启动" 问题 小伙伴们安装xmapp后发现Apache不能正常开启,下面给出了不同情况的解决办法,可以分为以下几种情况分析问题: ...

  9. ④JavaScript格式化时间戳

    这部分代码是按照网上的教程写的,忘记在哪里看到了

  10. hdu3586 Information Disturbing 树形DP+二分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 题目大意:给定n个敌方据点,编号1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值c ...