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---------------