对于每个唯一ID($ 1),我需要将$6
的第一条记录除以$4
的第一条记录。
4 2016-07-19 06:09:50 546.5 3 11.5
4 2016-07-20 06:40:03 543.667 3 11.5
4 2016-07-21 05:43:18 539 3 11.5
4 2016-07-22 07:18:20 535 3 11.5
10 2016-07-20 08:08:45 488 3 17.5
10 2016-07-21 07:32:35 490.5 3 17.5
10 2016-07-23 06:01:58 470.5 3 17.5
10 2016-07-24 08:26:02 472 3 17.5
输出看起来像这样,
4 2016-07-19 06:09:50 546.5 3 11.5 0.02
4 2016-07-20 06:40:03 543.667 3 11.5 0.02
4 2016-07-21 05:43:18 539 3 11.5 0.02
4 2016-07-22 07:18:20 535 3 11.5 0.02
10 2016-07-20 08:08:45 488 3 17.5 0.036
10 2016-07-21 07:32:35 490.5 3 17.5 0.036
10 2016-07-23 06:01:58 470.5 3 17.5 0.036
10 2016-07-24 08:26:02 472 3 17.5 0.036
答案 0 :(得分:1)
$ awk 'p!=$1{q=sprintf("%.3f", $6/$4)} {$(NF+1)=q;p=$1}1' file
4 2016-07-19 06:09:50 546.5 3 11.5 0.021
4 2016-07-20 06:40:03 543.667 3 11.5 0.021
4 2016-07-21 05:43:18 539 3 11.5 0.021
4 2016-07-22 07:18:20 535 3 11.5 0.021
10 2016-07-20 08:08:45 488 3 17.5 0.036
10 2016-07-21 07:32:35 490.5 3 17.5 0.036
10 2016-07-23 06:01:58 470.5 3 17.5 0.036
10 2016-07-24 08:26:02 472 3 17.5 0.036
说明:
p!=$1 { # when the $1 changes
q=sprintf("%.3f", $6/$4) # calculate the value q to append to records
}
{ # for all records
$(NF+1)=q # append q to them
p=$1 # remember previous $1
} 1 # print
答案 1 :(得分:0)
awk
救援!
$ awk '!($1 in a){a[$1]=$6/$4} {printf "%s\t%.3f\n",$0,a[$1]}' file
4 2016-07-19 06:09:50 546.5 3 11.5 0.021
4 2016-07-20 06:40:03 543.667 3 11.5 0.021
4 2016-07-21 05:43:18 539 3 11.5 0.021
4 2016-07-22 07:18:20 535 3 11.5 0.021
10 2016-07-20 08:08:45 488 3 17.5 0.036
10 2016-07-21 07:32:35 490.5 3 17.5 0.036
10 2016-07-23 06:01:58 470.5 3 17.5 0.036
10 2016-07-24 08:26:02 472 3 17.5 0.036
您的输出格式不一致(2或3个十进制数字),有方法可以完全匹配但不确定它是故意的。
答案 2 :(得分:0)
@ Alula-和karakfa一样的逻辑,但是尽管首先要经过循环再打印,然后在打印本身内进行检查。
awk '{printf "%s\t%.3f\n",$0,!a[$1]?a[$1]=$6/$4:a[$1]}' Input_file
我希望这会对你有所帮助。