Awk 在新列中打印行的下一个元素

Awk 在新列中打印行的下一个元素,awk,sed,Awk,Sed,我有一个非常大的文件,格式如下: 1 10802 1 10876 1 10952 1 11813 1 10802 10876 74 我想用这种格式写: 1 10802 1 10876 1 10952 1 11813 1 10802 10876 74 第一列、第二列、第二列的第二个元素是第三列的第一个元素,并且$4=$3-$2,即第四列应该是第3列和第2列的减法。这可以使它: $ awk

我有一个非常大的文件,格式如下:

1       10802
1       10876
1      10952
1      11813
1    10802 10876 74 
我想用这种格式写:

1       10802
1       10876
1      10952
1      11813
1    10802 10876 74 
第一列、第二列、第二列的第二个元素是第三列的第一个元素,并且$4=$3-$2,即第四列应该是第3列和第2列的减法。

这可以使它:

$ awk 'NR==1{p=$2; next} {print $1, p, $2, $2-p; p=$2}' file
1 10802 10876 74
1 10876 10952 76
1 10952 11813 861
解释
  • NR==1{p=$2;next}
    当我们在第一行时,只需将第二列存储在变量
    p
    中并跳过行
  • {print$1,p,$2,$2-p;p=$2}
    从这里开始,继续按如下方式打印值:第1列,
    p
    (存储值),第2列,差异。然后,将第二列的值存储在变量
    p
    中,用于下一个循环

第二行将是1 10876 10952 76到目前为止,您编写了哪些脚本?太好了,非常感谢。为了解需求,请使用大+1!我被难住了!