![使用 awk 从相邻列和连续行中减去数字](https://linux22.com/image/151005/%E4%BD%BF%E7%94%A8%20awk%20%E4%BB%8E%E7%9B%B8%E9%82%BB%E5%88%97%E5%92%8C%E8%BF%9E%E7%BB%AD%E8%A1%8C%E4%B8%AD%E5%87%8F%E5%8E%BB%E6%95%B0%E5%AD%97.png)
我有一个制表符分隔的文件,如下所示:
NZ_CP023599.1 WP_003911075.1 302845 305406
NZ_CP023599.1 WP_003898428.1 471171 472583
NZ_CP023599.1 WP_003402248.1 534387 535157
NZ_CP023599.1 WP_003402301.1 552556 553950
NZ_CP023599.1 WP_003402318.1 558837 559697
我需要从下一行第三列的数字中减去每行第四列的数字,然后将下一行的差值打印为第五列。
输出如下所示:
NZ_CP023599.1 WP_003911075.1 302845 305406
NZ_CP023599.1 WP_003898428.1 471171 472583 165765
NZ_CP023599.1 WP_003402248.1 534387 535157 61804
NZ_CP023599.1 WP_003402301.1 552556 553950 17399
NZ_CP023599.1 WP_003402318.1 558837 559697 4887
我该如何使用 awk 来解决这个问题?
答案1
您可以按如下方式执行此操作。推迟除第一行之外的减法,但获取其最后一列值作为后续行的输入。
awk -F'\t' 'BEGIN { OFS = FS } NR == 1 { last = $4; print; next }{ $5 = $3 - last; last = $4 }1' file
答案2
awk -F\\t '{ if (length(prev4)>0) { col5 = FS ($3-prev4) }; print $0 col5; prev4 = $4 }' InputFile