假定我们要求一列数值数据的中值,数据存放在data.txt文件中,如果直接如下使用:
data_num=`cat data.txt |wc -l`
median_cnt=`expr $data_num / 2`
export median_cnt
median_value=`sort -g data.txt |awk '{if (NR == $median_cnt ) print }'`
将不能得到中值,因为awk不认识$median_cnt的SHELL变量。
有两种方法解决以上问题:
(1)使用awk的-v参数
awk的-v参数可以定义变量,这样可以将SHELL变量传进awk中:
median_value=`sort -g data.txt |awk -v median=$median_cnt {if (NR == median) print}`
这样就可以了。
(2)使用ENVIRON获取环境变量
median_value=`sort -g data.txt |awk if (NR == ENVIRON["median_cnt"]) print}`
这样也可以。
data_num=`cat data.txt |wc -l`
median_cnt=`expr $data_num / 2`
export median_cnt
median_value=`sort -g data.txt |awk '{if (NR == $median_cnt ) print }'`
将不能得到中值,因为awk不认识$median_cnt的SHELL变量。
有两种方法解决以上问题:
(1)使用awk的-v参数
awk的-v参数可以定义变量,这样可以将SHELL变量传进awk中:
median_value=`sort -g data.txt |awk -v median=$median_cnt {if (NR == median) print}`
这样就可以了。
(2)使用ENVIRON获取环境变量
median_value=`sort -g data.txt |awk if (NR == ENVIRON["median_cnt"]) print}`
这样也可以。