苍天啊!!!这就是差距!!!偶花了多半天时间给学姐写的脚本,她的老大一条命令就给解决了!!!无颜见江东父老啊。。。
首先说下,功能是把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了上,有木有!!!
膜拜那位老大!= -