题目

[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中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域.也就是说,如果变量是在某个函数中定义的,那么,它在函数以外的地方是不可见的.但是,如果该变量是定义在if或者for这样的代码块 ...

  2. 【算法系列学习】巧妙建图,暴搜去重 Counting Cliques

    E - Counting Cliques http://blog.csdn.net/eventqueue/article/details/52973747 http://blog.csdn.net/y ...

  3. HDU 2080 夹角有多大II (数学) atan(y/x)分类求角度

    夹角有多大II Problem Description 这次xhd面临的问题是这样的:在一个平面内有两个点,求两个点分别和原点的连线的夹角的大小.注:夹角的范围[0,180],两个点不会在圆心出现. ...

  4. 图论算法-Dijkstra

    原理 Dijkstra是一个神奇的最短路径算法,它的优点在于它可以稳定的时间内求出一张图从某点到另一点的距离.它的工作原理非常简单,思路类似于广搜.在搜索前,将每个点的颜色设为白色,第一次将源点Ins ...

  5. 走进javascript——类型

    ECMAScript语言类型对应于使用ECMAScript语言的ECMAScript程序员直接操作的值.ECMAScript语言类型有以下几种Undefined,Null,Boolean,String ...

  6. mysql修改数据库名

    1.创建新库 2.创建新库用户 3.备份旧库 4.修改表名 5.删除旧库   环境:mysql5.6已经有数据库dbbzpt,需要把它修改为dbedu.   1,2.使用root用户登录创建新库.创建 ...

  7. Excel 数据导出

    Web  controller /// <summary> /// 导出数据 /// </summary> /// <param name="UserID&qu ...

  8. 与redmine对接

    redmine使用的版本为 2.3.01.打开rest web service2.jar依赖 <dependency> <groupId>com.taskadapter< ...

  9. PAT1028. List Sorting (25)---strcmp

    题目链接为:https://www.patest.cn/contests/pat-a-practise/1028 1028. List Sorting (25) Excel can sort reco ...

  10. 在linux下管理iphone

    场景: linux发行版:ubuntu 14.04 64bit 3.13.0-67-generic(内核版本) iphone型号:iphone 5c (ios 8.1.3 已越狱) 准备工作(一定要先 ...