awk为什么直接引用打印awk 引用外部变量量输出多了字符?这是awk的bug?

awk中print函数的使用
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
提示:读者需要有一点的awk基础
引用书中的两句话:
1、print函数用于打印不需要特别编排格式的简单输出
2、print函数的参数可以是变量、数值或字符串常量。字符串必须用双引号括起来。
图1:显示演示文件(employees)及文件中的内容
图2:用print函数打印数值(123456)、字符串常量(abcdefg)、及内部变量$1的值
(个人猜测数值可以不加双引号,是因为它不能做变量名,故不会将值与变量名混淆)
图3:如果字符串不加双引号(aaaa),或字符串加单引号(‘bbbb')则打印空字符串
(个人猜测print将a,aaaa,bbbb看成是模式中自定义的变量,但实际上模式中未定义,故取值为空,参见图5)
图4:$a不为合理的内部变量,print默认打印整条记录,(个人猜测print将以$开头的变量默认为内部变量,并且有默认值)
图5:模式中自定义变量,在print中直接引用不需要加$符号,当成自定义的内部变量
图6:结合上述很有启发性
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。相关文章推荐:
引用外部变量
如下三行代码可打印出需要的结果datetime="-23"echo"a"|awk'{print"'$datetime'"}'echo"a"|awk-vvar1=$datetime'{printvar1}'但:datetime="-23"awk-vvar1=$datetime'{if($1~/var/&&$2=="2"&&$3=="0")print$0}'1.txtawk'{if($1~/"'$datetime'"/&&$2=="2"&&$3=="0")print$0}'1.txt都无法获取响应的结果,参数就没有带入我要实现的是将如下的三个字符串全部用外部变量来传入,望高人指点!awk'{if($1~/-23/&&$2=="2"&&$3=="0")print$0}'1.txt|wc
其他文章推荐
大家好,forfilein$(find/cdma_exchange/downloadFromJituan/200904-typef-name"IOSMP_2009042*"|grep-vtemp)dotmp=$fileawk-F'|''{if(NF>46&&substr($17,1,==&&$14==)print'$tmp'":"$0}'$filedone为什么这个脚本运行时,打印$tmp会出错呢?但是, ......
比如一个脚本内容:name=hahaawk'$2==$name{print$2}'awktestawktest文件内容:adflsjahahaxcjvio我的想法是当第二列数值为haha时,打印第第二列,但脚本中的$name看来没有被识别,请问如何让脚本里的$name就相当于haha讷谢谢各位...
我想在awk的正则表达式中引用外部变量,可是如下试了一下不行。awk出了正则表达式错误的信息。有谁知道该怎么写吗?...
比如:A="Iloveu"awk'/'$A'/{print$0}'./mytxt为什么在这里'$A'要用单引号,shell十三问中不是说单引号中的内容不展开吗?...
文章推荐:
盛拓传媒:
友情链接:
特别鸣谢:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
CHINAUNIX推荐文章解答你所有技术难题新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 115, 距离下一级还需 85 积分
论坛徽章:1
看awk的外部变量有点不大理解,shell13问看过了。还是有点不大理解。。
如下代码:ip=&192.168.168.168&
#!/bin/bash
awk '$1 ~/'$1'/{print $ip}' text复制代码脚本就一条命令:执行./text 192.168.168.168.输出结果正常。如果改成下面方式就不正常awk ‘“‘$1’” ~/$1/{print &'$ip'&}’ text复制代码按照此方式就没有输出了,好像问题在单双引号这边,麻烦懂的解释一下。。
富足长乐, 积分 6090, 距离下一级还需 1910 积分
论坛徽章:51
不建议用你描述这种方法处理外部变量!
#!/bin/bash
awk -v ip=$1 '$1~ip' text
富足长乐, 积分 6624, 距离下一级还需 1376 积分
论坛徽章:2
没太看明白LZ意思
awk ‘“‘$1’” ~/$1/{print &'$ip'&}’ text
这句匹配脚本入参的时候,入参是用双引号括起来再进行匹配?
但是执行./text 192.168.168.168的时候,入参的IP字段本身并没有双引号啊
家境小康, 积分 1292, 距离下一级还需 708 积分
论坛徽章:10
单引号已转义了$1本身即作为参数的含义,我是这么理解的。
丰衣足食, 积分 551, 距离下一级还需 449 积分
论坛徽章:1
。。。没看明白什么意思,不过外部变量建议用-v,就是六子大大说的方法
白手起家, 积分 115, 距离下一级还需 85 积分
论坛徽章:1
好吧。。。。我还是老实点用-v吧。。。回复
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处}

我要回帖

更多关于 awk如何引用变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信