在awk中减去两个连续行的两个字段

时间:2017-07-13 13:47:00

标签: awk

我有一个文件如下:

5 6
7 8
12 15

使用awk,如何找到一行第二列与下一行第一列之间的距离。在这种情况下,6到7和8和12之间的距离打印如下,第一行的距离设置为零:

5 6 0
7 8 1
12 15 4

3 个答案:

答案 0 :(得分:2)

尝试:

awk 'NR==1{val=$2;print $0,"0";next} {print $0,$1-val;val=$2}' Input_file

现在添加说明太成功了。 检查NR == 1(当Input_file的第一行)时,然后创建一个名为val tp的变量,输入文件的第二个字段,然后用“0”打印当前行,然后执行next(这将跳过所有进一步的语句)。然后打印当前行以及$ 1-val的值,然后将val变量的值分配给当前行的$ 2。

答案 1 :(得分:1)

awk 方法:

awk 'NR==1{ $3=0 }NR>1{ $3=$1-p }{ p=$2 }1' file

输出:

5 6 0
7 8 1
12 15 4
  • p=$2 - 捕获第二个字段值(p - 被视为之前的行值)

答案 2 :(得分:1)

awk '{print $0, (NR>1?$1-p:0); p=$2}' file