我想打印出文件的行,直到第三个字段的累积和大于0.99,然后只打印出累积和大于或等于0.99的第一行。但是,如果第3行的累积和大于或等于0.99的第一行的字段2与下一行的字段2匹配,则应打印两行。
我的文件如下:
rs76832595 -4.4524 0.501109
rs74660964 -4.9815 0.49886
rs12992037 -4.9815 9.8159e-06
rs934367 -4.3376 3.06953e-06
期望的输出:
rs76832595 -4.4524 0.501109
rs74660964 -4.9815 0.49886
rs12992037 -4.9815 9.8159e-06
在上面的例子中,字段3的累积和在第2行超过0.99,但我也打印第3行,因为第2行和第3行的字段2相等。如果这些字段不相等,我只打印第1行和第2行。
我有以下命令,它适用于累积和,但不适用于比较相邻行之间的字段2:
awk '{sum+=$3;print $0;if(sum>=0.99)exit}' file
有人可以修改此内容以包含上述要求吗?
答案 0 :(得分:2)
以下内容应符合您的要求:
鉴于file
包含
rs76832595 -4.4524 0.501109
rs74660964 -4.9815 0.49886
rs12992037 -4.9815 9.8159e-06
rs934367 -4.3376 3.06953e-06
以下awk
- 脚本
awk '{sum+=$3; print $0; if(sum >= 0.99 && prev_row == $2)exit;prev_row=$2}' file
将产生
rs76832595 -4.4524 0.501109
rs74660964 -4.9815 0.49886
rs12992037 -4.9815 9.8159e-06
脚本中的更改包括在语句末尾添加prev_row=$2
以跟踪上一行,并将prev_row
合并到if
语句中。