偶被秒杀了!!!

苍天啊!!!这就是差距!!!偶花了多半天时间给学姐写的脚本,她的老大一条命令就给解决了!!!无颜见江东父老啊。。。

首先说下,功能是把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了上,有木有!!!

膜拜那位老大!= -  

原文地址:https://www.cnblogs.com/aaronwxb/p/2150532.html