将外部参数传入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视为字符串
作者:Xuran,中科院在读博士,博客网址https://www.cnblogs.com/liangxuran/转载请标明出处。
以上是关于将外部参数传入awk命令的方法汇总的主要内容,如果未能解决你的问题,请参考以下文章