将外部参数传入awk命令的方法汇总

Posted Philbert

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将外部参数传入awk命令的方法汇总相关的知识,希望对你有一定的参考价值。

将shell脚本里的参数传递进入awk命令里的方法:从文件中读取,从管道传递,从shell变量中读取

将外部参数传递进入awk命令

将shell脚本里的参数传递进入awk命令里的方法:从文件中读取,从管道传递,从shell变量中读取等,每种方法的适用不同。

把数据传入awk的方法汇总

方法1:文件

将file文件里的数据传入awk命令

awk \'print $0\' file 

当有多个文件时,可以在后面加入多个文件名

awk \'FILENAME==ARGV[1]print $0FILENAME==ARGV[2]print $0\' file1 file2 

方法2:管道

通过管道将前面的数据传入awk命令

cat file | awk \'print $0\'
echo $var | awk \'print $0\'

该方法的缺点是管道命令只有一个出口,一个入口,因此只能将一组数据传入awk

方法3:变量

可以通过-v选项将外部变量var传给内部变量a,也可以在BEGIN里将外部变量var赋值给内部变量a

var=1
awk -v a="$var" \'BEGINprint a\'
awk \'BEGINa=\'"$var"\'; print a\'

当变量有多个时,可以使用多次-v选项,或者在BEGIN里多次赋值

var1=1
var2=2
awk -v a="$var1" -v b="$var2" \'BEGINprint a,b\'
awk \'BEGINa=\'"$var1"\'; b=\'"$var2"\'; print a,b\'

方法4:以上方法的混合

管道方法和文件方法不能同时使用,其他方法均可同时使用。所以,awk可以同时输入外部变量并读取外部文件,也可以同时接收管道数据并传入外部变量。
例如计算弧长对应的距离

pi=3.14159265
radius=6371.05
awk -v r="$radius" \'BEGINpi=\'"$pi"\'print pi*r*$1\' file | cat

参数传递的区别

使用-v和BEGIN传入参数的区别

如果传入的字符串包含数字,就有区别,一个例子可以说明

a=1/2
awk \'BEGINss=\'"$a"\'; split(ss,str,"/"); print str[1]\'  #输出0.5,因为把a视为表达式
awk -v ss="$a" \'BEGINsplit(ss,str,"/"); print str[1]\'  #输出1,因为把a视为字符串

以上是关于将外部参数传入awk命令的方法汇总的主要内容,如果未能解决你的问题,请参考以下文章

python获取外部传入多个参数

awk从入门到入土(15)awk执行外部命令

awk

awk 学习汇总

Linux日志分析常用命令汇总

内置默认方法汇总