最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

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

来源:博客园


(相关资料图)

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

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

把数据传入awk的方法汇总

方法1:文件

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

awk "{print $0}" file 

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

awk "FILENAME==ARGV[1]{print $0}FILENAME==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=1awk -v a="$var" "BEGIN{print a}"awk "BEGIN{a=""$var""; print a}"

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

var1=1var2=2awk -v a="$var1" -v b="$var2" "BEGIN{print a,b}"awk "BEGIN{a=""$var1""; b=""$var2""; print a,b}"

方法4:以上方法的混合

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

pi=3.14159265radius=6371.05awk -v r="$radius" "BEGIN{pi=""$pi""}{print pi*r*$1}" file | cat

参数传递的区别

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

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

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

关键词: 参数传递 同时使用 外部文件