shell文本过滤编程(七):awk之变量传递

【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】

由于awk经常在shell脚本中使用,所以shell脚本中的有些变量要传递到awk中使用,这一节就说一下awk引用shell中的变量方法。

为避免屏幕输出太多东西,我们先将被操作文件该为一行,如下:

# catgroup_file3

vboxusers:x:984:allen

1、 文件名之前传递变量。

格式如下:awk ‘{print var1, var2}‘ var1=aaa var2=bbb filename

#!/bin/sh

shell_var="test"
awk '{printvar}' var=$shell_var group_file3

输出结果为:

#./61_awk_var.sh
test

这里变量赋值要放在文件名之前,否则变量值会取不到。比如如果脚本这样写不会输出变量值。

#!/bin/sh

shell_var="test"
awk '{print var}'group_file3 var=$shell_var

其实这种方法在BEGIN中无法使用变量,比如这样写脚本:

#!/bin/sh

shell_var="test"

awk '
BEGIN{
    print "begin output var:" var
}
{
    print var
}
END{
    print "end output var:" var
} 'var=$shell_var group_file3

输出结果为:

#./64_awk_var.sh
begin outputvar:
test
end outputvar:test

2、 使用-v传递变量。

格式如下:awk -v var=$shell_var ‘{print var}‘ filename

#!/bin/sh

shell_var="test"
awk -vvar=$shell_var '{print var}'  group_file3

再试试该值在BEGIN中是否可以使用:

#!/bin/sh

shell_var="test"

awk -vvar=$shell_var '
BEGIN{
    print"begin output var:" var
}
{
    print var
}
END{
    print "end output var:" var
} ' group_file3

执行结果:

#./63_awk_var.sh
begin outputvar:test
test
end outputvar:test

这种方法传递的变量在BEGIN可以使用。

3、 直接使用shell变量。

格式如下:awk ‘{print "‘$shell_var‘"}‘ filename,注意:先用双引号,再用单引号。

#!/bin/sh

var="test"

awk '
BEGIN{
    print "begin outputvar:" "'$var'"
}
{
    print "'$var'"
}
END{
    print "end outputvar:" "'$var'"
} ' group_file3

执行结果:

# ./65_awk_var.sh
begin output var:test
test
end output var:test
 

变量传递不但可以传递自定义变量,还可以传递环境变量,用法同自定义变量类似。。

时间: 2024-10-06 01:19:57

shell文本过滤编程(七):awk之变量传递的相关文章

shell文本过滤编程(二):awk之基础

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上一节说到了grep命令,grep命令主要用在获取符合规则的行信息.本节要讲的awk在对某文件或字符串中获取指定文本域有较强大的功能. a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息. a w k抽取信息后,才能进行其他文本操作.完整的 a w k脚本通常用来格式化文本文件中的信息. 在命令行上调用awk命令式最常用的使用awk的方式:

shell文本过滤编程(四):awk内置变量及一般变量

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] awk有许多内置变量用来设置环境信息.这些变量可以被改变.下面是awk内置变量: ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME  a w k浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 - F选项 NF 浏览记录的域个数 NR 已读的记录数 OFS 输出域分隔符

shell文本过滤编程(八):awk之内置函数

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 这一节来见识一下a w k许多强大的字符串函数及其使用方法. 1. sub 和 gsub函数: 用法:sub( Ere, Repl, [ str ] ) gsub( Ere, Repl, [ str ] ) 在第三个参数给出字符串中查找满足Ere 参数指定的扩展正则表达式的字符串,并使用第二个参数替换之.如果未指定 In 参数,缺省值是整个记录($0 记录变量)

shell文本过滤编程(五):awk之printf

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在大多数情况下 awk 的 print 语句可以完成任务,但有时我们还需要更多.在那些情况下,awk 提供了两个我们熟知的函数 printf() 和 sprintf().是的,如同其它许多 awk 部件一样,这些函数等同于相应的 C 语言函数.printf() 会将格式化字符串打印到 stdout,而 sprintf()函数返回根据printf格式说明指定的格式

shell文本过滤编程(六):awk之循环判断及数组

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 与上一节printf一样,awk的循环判断和C语言的循环判断语法极其类似. 1. While循环 #!/bin/sh awk ' BEGIN { ORS="" } { i=0 while (i < NF) { printf("* ") i++ } print "\n" } ' group_file1 首先,

shell文本过滤编程(三):awk之条件判断

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 在之前grep章节中用到很多正则表达式,这一节将在awk条件操作中使用正则表达式.awk 允许使用正则表达式,根据正则表达式是否匹配当前行来选择执行独立代码块. 下面先给出awk的条件操作符: <       小于 <=    小于等于 ==   等于 !=     不等于 >     大于 >=    大于等于 ~     匹配正则表达式 !~ 

shell文本过滤编程(一):grep和正则表达式

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有很多文件,比如配置文件.日志文件.用户文件等.文件中都包含了大量的信息,我们可以使用cat等命令轻松将其输出到屏幕,但如果要从文件中分析或提取数据,还需要其他工具来实现.而linux正好提供了这些工具:grep.awk.sed等.把这些工具使用好,可以极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发人员来说也可以在开发

shell文本过滤编程(一):grep和正則表達式

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有非常多文件,比方配置文件.日志文件.用户文件等.文件里都包括了大量的信息,我们能够使用cat等命令轻松将其输出到屏幕,但假设要从文件里分析或提取数据,还须要其它工具来实现.而linux正好提供了这些工具:grep.awk.sed等.把这些工具使用好,能够极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发者来说也能够在开发

shell文本过滤编程(九):sed命令

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] sed和awk类似,是很重要的文本过滤工具. 调用sed和调用awk一样,有三种方式: 1. 在命令行键入命令: 2.将sed命令插入脚本文件,然后调用sed: 3. 将sed命令插入脚本文件,并使sed脚本可执行. 使用sed命令行格式为: sed [option] 'sed cmd' inputfile 使用sed脚本文件,格式为: sed [option]