awk命令是一种很方便的字段截取工具,然而在编写shell脚本中,给awk命令传入参数却有着严格的格式,博主经过多次测试,才找到给awk命令传参的方法:
如以下脚本:
#!/bin/bash
##处理脚本
#################
i=$1
echo ----------------开始 $i --------------------------
for (( j = $[$i+1]; j <= 9990; j++ ))
do
sum_tot=0
sum_sam=0
for (( k = 2; k <= 21427; k++ ))
do
line1=`cat hebing.txt|awk "NR==$i{print}"|awk -F "," '{print $'$k'}'`
#取出第i行第K个位置的数据,$k必须加单引号声明,否则shell无法识别
line2=`cat hebing.txt|awk "NR==$j{print}"|awk -F "," '{print $'$k'}'`
#取出第j行第K个位置的数据
if [ -z "$line1" -a -z "$line2" ] ;then
continue;
elif [ "$line1" == "$line2" ];then
sum_sam=$[$sum_sam+1]
sum_tot=$[$sum_tot+1]
else
sum_tot=$[$sum_tot+1]
fi
done
#根据第i行与第j行相同的字段条目进行取值
bizhi=$[$sum_sam*100/$sum_tot]
if [ $bizhi -lt 80 -a $bizhi -ge 50 ];then
echo $i"|"$j"|"$sum_sam"|"$sum_tot"|"$bizhi >>bizhi_50_80.txt
elif [ $bizhi -lt 100 -a $bizhi -ge 80 ];then
echo $i"|"$j"|"$sum_sam"|"$sum_tot"|"$bizhi >>bizhi_80_100.txt
elif [ $bizhi -eq 100 ];then
echo $i"|"$j"|"$sum_sam"|"$sum_tot"|"$bizhi >>bizhi_100.txt
fi
done
echo ------------执行完毕 $i---------------