【发布时间】:2019-08-06 10:36:49
【问题描述】:
如果第一场匹配但第三场信号相反,我想打印连续行。然后计算连续行的第二个字段之间的距离。
输入:
id1 pos1 0.19
id1 pos2 0.33
id1 pos3 -0.25
id1 pos4 -0.22
id2 pos5 0.33
id3 pos6 -0.21
id3 pos7 -0.56
id3 pos8 -0.20
id3 pos9 0.33
id3 pos10 -0.32
中间输出:
id1 pos2 0.33
id1 pos3 -0.25
id3 pos8 -0.20
id3 pos9 0.33
id3 pos10 -0.32
期望的输出:
id1 pos3-pos2
id3 pos9-pos8
id3 pos10-pos9
我发现了比较连续行的类似问题,但没有一个可以用来回答我的问题。
到目前为止我尝试过:
awk '$1==prev1{$NF=$2-prev2;print $1,$NF} {prev2=$2;prev1=$1}'
但我不知道如何添加第三场的条件必须有相反的信号。
【问题讨论】:
-
为什么这个输出
id3 pos8 -0.20之前是id3 pos7 -0.56也是一个负值?通过相反的信号,你会从 + 到 - 吗? -
如果第一个字段与上一行相同(相同的 id)并且上一行的第三个字段值为负但当前行为正(或反之亦然),则减去上一行的字段 2从当前行开始。 (字段 2 是位置)
-
我更新了我的帖子。它现在查看在同一 ID 内从 + 到 - 以及从 - 到 + 的变化