如何使用awk读取值并使用之前的值和下一个值进行计算,并将其添加到每行的其他列中:
示例test.log:
$1 $2 $3 $4 $5 $6
2018/02/21 14:00:24 911 848 958 719
2018/02/21 14:00:34 978 848 998 966
第7栏:
$1 $2 $3 $4 $5 $6 $7
2018/02/21 14:00:24 911 848 958 719 0.0
2018/02/21 14:00:34 978 848 998 966 0.45
第7列应通过以下函数计算:
(($3-prev3)+($5-prev5))/240 = ((978-911)+(998-958))/240
日志文件中的第一行只能有第7列的0.0!
我的问题是,我希望将第7列即时添加到日志文件中,而不是仅在打印输出完成后才添加:
awk '{a=$3;b=$5;getline;print(($3-a)+($5-b))/240}' test.log
我该怎么做? 是否有可能在当前行并存储在先前值的变量中?
使用6列应该动态创建日志文件的单行添加第7列并进行上述计算:
while true; do echo `date +"%Y/%m/%d %H:%M:%S"` "#" `echo $RANDOM` "#" `echo $RANDOM` "#" `echo $RANDOM` "#" `echo $RANDOM` | awk -F# '{printf "%-20s %-15s %-15s %-15s %-15s\n",$1,$2,$3,$4,$5}'>>test.log; sleep 10; done
此尝试也不起作用,因为它总是在第7列添加0:
awk -F# '{a=$3;b=$5;printf "%-20s %-15s %-15s %-15s %-15s %-15s\n",$1,$2,$3,$4,$5,(($3-a)+($5-b))/240}'
我认为a,b与$ 3& 5美元而不是以前的价值!
test.log中:
2018/02/22 03:37:12 10241 29132 3358 17816 0
2018/02/22 03:37:17 12464 21254 16716 10024 0
使用awk脚本的一个解决方案,但它不是即时解决方案:
awk '{a=$3;b=$5;getline;print(($3-a)+($5-b))/240}' test.log
仅将计算作为输出!
由于
答案 0 :(得分:0)
bundle update rake
输入:
awk -v OFS="\t" 'FNR==1{
print $0, "$7";
next
}
p3!=""{
n=(($3-p3)+($5-p5))/240
}
{
p3=$3;
p5=$5;
print $0,n+0
}
' infile
输出:
$ cat infile
$1 $2 $3 $4 $5 $6
2018/02/21 14:00:24 911 848 958 719
2018/02/21 14:00:34 978 848 998 966