苍天啊!!!这就是差距!!!偶花了多半天时间给学姐写的脚本,她的老大一条命令就给解决了!!!无颜见江东父老啊。。。
首先说下,功能是把a中TIME和b中的TIME相同的OUT_FLOW值加在file1中,并且多加一列,该列值为1(当OUT_FLOW在UP和LOW之间)或0(当OUT_FLOW不在UP和LOW之间)
b:
TIME NAME C_NAME UP LOW
a:
TIME C_NAME OUT_FLOW
这是我的代码。。。
#!/bin/sh UP_LOW_FILE="/b" OUT_FLOW_FILE="/a" NEW_OUT_FLOW_FILE="/c" NEW_UP_LOW_FILE="/d" NEW_FILE="/comb" sed "s/\r//;s/^ //;/^$/d" $UP_LOW_FILE > $NEW_UP_LOW_FILE sed "s/\r//;s/^ //;/^$/d" $OUT_FLOW_FILE > $NEW_OUT_FLOW_FILE cp $NEW_UP_LOW_FILE $NEW_FILE j=1 num=1000000 while read v2 do a2=`echo $v2 | awk '{print $1}'` b2=`echo $v2 | awk '{print $2}'` c2=`echo $v2 | awk '{print $3}'` d2=`echo $v2 | awk '{print $4}'` d2=`echo "scale=2;$d2/$num"|bc` while read v1 do a1=`echo $v1 | awk '{print $1}'` b1=`echo $v1 | awk '{print $2}'` c1=`echo $v1 | awk '{print $4}'` up=`echo $v1 | awk '{print $5}'` low=`echo $v1 | awk '{print $6}'` if [ "$j" -eq "1" ] then sed -i "s/$v1/&\tOUT_FLOW/g" $NEW_FILE sed -i "s/$v1\tOUT_FLOW/&\tTROUBLE/g" $NEW_FILE j=$(($j+1)) continue fi if [ "$a1" = "$a2" ] && [ "$b1" = "$b2" ] && [ "$c1" = "$c2" ] then sed -i "s/$v1/&\t$d2/g" $NEW_FILE if [ `echo "$up >= $d2 && $low <= $d2" |bc` ] then sed -i "s/$v1\t$d2/&\t0/g" $NEW_FILE else sed -i "s/$v1\t$d2/&\t1/g" $NEW_FILE fi fi done < $NEW_UP_LOW_FILE j=$(($j+1)) done < $NEW_OUT_FLOW_FILE
请注意!!一定注意!!!奇迹出现了!!!
这是那位老大的代码:
awk 'NR==FNR{key=$1" "$2" "$3;a[key]=$4}NR>FNR{print $0,a[$1" "$2" "$4]/1000000}' a b | awk '{if($7<=$5&&$7>=$6) print $0,"0";else print $0,"1"}' > comb
亲,有木有!!!只有一行代码,有木有!!!尼玛我咋不知道用NR,FNR,有木有!!!
太坑爹了,有木有!!!尼玛我怎么就没想到赋给一个变量,再打印出来,有木有!!!
都花时间在sed了上,有木有!!!
膜拜那位老大!= -