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
感谢南宁@黑哥的指导
awk内引用shell变量【自己手动加精】的更多相关文章
- awk中引用shell变量的方法
1.通过命令行参数定义变量时引用: awk -v awk变量名= shell变量名 #!/bin/bash var4bash=test awk -v var4awk="$var4bash&q ...
- awk中引用shell变量执行替换的脚本
遇到问题: 现在有两个脚本,我想 将file1中的内容按file2来匹配 [root@154 home]# cat file1 3-1-1 POTV=1,POTA=0,POTP=2 1-4-76 PO ...
- awk中使用shell变量
方法:使用-v参数. 对于多个shell变量使用多个-v 有个关于shell变量中的空格问题:
- 正则表达式中引用shell变量
注意,是用单引号包含双引号来引用变量 > MAPPING_ID_PO="000001:AP1-TU1000002:AP1-TU2000003:AP1-TU3000004:AP1-TU4 ...
- javascript深入理解js闭包【手动加精】
http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用 ...
- awk使用shell变量
awk使用shell变量 (可以计算浮点数) 其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time=&qu ...
- awk引用外部变量及调用系统命令方法
目标:想用awk与scp命令批量传送文件 前提:先搭好主机间的免密登陆环境(参考:http://www.cnblogs.com/tankaixiong/p/4172942.html) 实现脚本方法: ...
- Shell awk文本处理,shell脚本编写
Shell awk文本处理,shell脚本编写 一:内容包含awk.变量.运算符.if多分支 <a>语法糖: awk [options] 'commands' files option - ...
- linux中shell变量$#,$@,$0,$1,$2的含义
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
随机推荐
- WEB认证模式:Basic & Digest
一. HTTP Basic 客户端以" : "连接用户名和密码后,再经BASE64加密通过Authorization请求头发送该密文至服务端进行验证,每次请求都需要重复发送该密文. ...
- 【代码学习】GD库中简单的验证码
大体思路: 代码部分: <?php //1.创建画布 $img = imagecreatetruecolor(100,30); //2.设置颜色 值越小,颜色越深 $color1 = image ...
- [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍
声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...
- JDK内置日志系统
1.Java应用中的日志功能 ================= 一般的Java应用程序中都有记录日志的需求,目前主流的记录日志的方法是在应用程序中引入log4j,用log4j来生成日志.其实,JDK ...
- self 和 super 关键字
self 相当于 java中的this self使用总结 1.self谁调用当前方法,self就代表谁 2.self在对象方法中,self代表当前对象 3.self在类方法中个,self代表类 [se ...
- linux文件系统下的特殊权限
SUID, SGID, Sticky 1 权限 r, w, x user, group, other 2 安全上下文 前提:进程有属主和属组:文件有属主和属组: (1) 任何一个可执行程序文件能不能启 ...
- 学习MVC之租房网站(八)- 前台注册和登录
在上一篇<学习MVC之租房网站(七)-房源管理和配图上传>完成了在后台新增.编辑房源信息以及上传房源配图的功能.到此后台开发便告一段落了,开始实现前台的功能,也是从用户的登录.注册开始. ...
- Spring IOC的使用
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性.所谓依 ...
- 实现ThreadFactory接口生成自定义的线程给Fork/Join框架
Fork/Join框架是Java7中最有趣的特征之一.它是Executor和ExecutorService接口的一个实现,允许你执行Callable和Runnable任务而不用管理这些执行线程.这个执 ...
- python selenium 元素定位(三)
上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...