awk引用外部变量问题

在awk中引用外部变量会无法生效,但使用双引号时候,内置变量会不识别;解决方法是使用三引号;

localhost ~]$ more awkfile
this is one
this is two
this is three
this is four
this is five
this is six
this is seven

$ awk ‘{print $3}‘ awkfile                             $ awk "{print $3}" awkfile   
one                                                            this is one                  
two                                                            this is two                  
three                                                          this is three                
four                                                            this is four                 
five                                                             this is five                 
six                                                               this is six                  
seven                                                          this is seven

[@localhost ~]$ more awk.sh
#!/bin/bash
echo "-----1111111111------------"
awk ‘NR==2 {print $3}‘ awkfile
echo "-----222222222-------------"
awk "NR==2 {print $3}" awkfile
echo "-----333333333-------------"
i=2
awk ‘NR==$i {print $3}‘ awkfile
echo "-----444444444-------------"
awk "NR==$i {print $3}" awkfile
echo "-----555555555-------------"
awk "NR==$i "‘{print $3}‘"" awkfile
[@localhost ~]$
[@localhost ~]$ sh awk.sh
-----1111111111------------
two
-----222222222-------------
this is two
-----333333333-------------
-----444444444-------------
this is two
-----555555555-------------
two
[@localhost ~]$

以上是个人浅薄经验,以此进行记录。

时间: 2024-09-30 17:51:34

awk引用外部变量问题的相关文章

shell if判断(曾经被一个字符串相等的判断纠结半小时,最后只是if后少了个空格!) 和 awk引用外部变量判断

一.if判断 数字: $A=12 $B=15 if(("$A"<"$B")) if(("$A"=="$B")) 字符串: $A="HELLO" $B="WORLD" if [ "$A" = "FACT_LOGIN_USER" ] if [ "$A" = "$B" ] PS:字符串比较的时候注意 'if'

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

目标:想用awk与scp命令批量传送文件 前提:先搭好主机间的免密登陆环境(参考:http://www.cnblogs.com/tankaixiong/p/4172942.html) 实现脚本方法: 1.在一个文件中记录好各个主机的端口与ip地址,第一列为主机描述信息,参考信息 [[email protected] share]# cat scp_port_ip.txt host1 33330 192.168.10.11 host2 33331 192.168.20.22 host3 33332

awk调用外部变量

一.用awk 有以下几种方法去调用变量:1.  awk '{print a, b}' a=111 b=222 yourfile注意, 变量位置要在 file 名之前, 否则就不能调用.还有, 于 BEGIN{}中是不能调用这些的variable. 要用之后所讲的第二种方法才可解决.2.  awk –v a=111 –v b=222 '{print a,b}' yourfile注意, 对每一个变量加一个 –v 作传递.3.  awk '{print " ' "$LOGNAME"

关于内部类引用外部变量的理解

观察下面代码 1,如果把第五行的注释打开则编译不通过,因为方法内的变量需要是final变量或者事实上的final变量(effectively final)才可以传入匿名内部类被使用 2,把第五行注释加上之后,用java8可以编译通过,此时变量d是事实上的final变量,jvm可以放心地把该变量复制到内部类中 3,为什么需要把d复制一份到内部类?因为test1方法的生命周期比内部类要短,导致test1执行完之后栈内的变量随着方法栈销毁而销毁,此时内部类还存在 4,第二和第三个方法,内部类也引用了外

Python:字符串中引用外部变量的3种方法

方法一: 1 username=input('username:') 2 age=input('age:') 3 job=input('job:') 4 salary=input('salary') 5 6 info1=''' 7 -----------------------info of %s---------------------------- 8 Name:%s 9 Age:%s 10 Job:%s 11 Salary:%s 12 ''' %(username,username,age

一个注意事项:内部类引用的外部变量必须是final的

之前写过一个项目,好久没更新了,最近翻起以前的代码,发现在这里报了一个错.(现在转到Intellij了,从前在Eclipse luna中是可以编译通过的,Eclipse mars也会报错,JDK版本都是1.8,还没去查为什么) 为什么在内部类中引用外部变量时,必须声明为final呢? 最开始我想的是,会和Java的内存模型有关.因为我们都知道,带有static的变量或者方法是属于类的,也就是说,类成员是被储存在堆内存里面的.那么final是否也是这样?经过查找资料,得知:final 是保护 所修

在awk代码中引用shell变量的方法

一个香栗子胜过千言万语 #!/bin/bash foo="Good" # 不带空格 bar="Hello World" # 带空格 awk 'BEGIN { print "'$foo'"; "'"$bar"'" }' 上面的栗子中,保持了用单引号把awk代码包围起来的惯例. 在awk代码中引用shell变量时, 使用一对双引号,内嵌一对单引号, 再在这一对内层单引号里面按$var(适用于不含空格的shell

Linux下如何让 awk 使用 Shell 变量

当我们编写 shell 脚本时,我们通常会在脚本中包含其它小程序或命令,例如 awk 操作.对于 awk 而言,我们需要找一些将某些值从 shell 传递到 awk 操作中的方法.那么如何让 awk 使用 Shell 变量呢?兄弟连Linux培训接下来为大家介绍一下: 有两种可能的方法可以让 awk 使用 shell 变量: 1. 使用 Shell 引用 让我们用一个示例来演示如何在一条 awk 命令中使用 shell 引用来替代一个 shell 变量.在该示例中,我们希望在文件 /etc/pa

利用命令行引用外部jar包以使程序正常运行的4种方法

声明:本博客为原创博客,未经允许,不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/30976069 平时写一些小的Java Demo时我比较喜欢用UltraEdit或记事本写完后,直接利用命令行进行编译和运行.这样的好处就是方便快捷.相信有这个习惯的人应该还大有人在.但是如果要引用外部jar包,应该如何操作呢?在写JDBC的一些Demo时,由于要利用jar包来加载相应的数据库,每个Demo都用到了外部jar包,所以特地总结了一下