后续行之间的awk差异

时间:2016-09-07 22:34:48

标签: linux awk

This是一个很好的例子,如果我想在单个列的后续行之间打印差异,如何解决问题。

awk 'NR>1{print $1-p} {p=$1}' file

但是如果我在文件中有多个(未知)列数并且我想要所有这些列的差异,我将如何做到这一点,例如。 (注意列数不一定是3,可以是10或15或更多)

col1    col2    col3
----    ----    ----
1       3       2
2       4       10
1       9       -3
.       .       .
输出将是:

col1    col2    col3
----    ----    ----
1       1       8
-1      5       -13
.       .       .

2 个答案:

答案 0 :(得分:1)

不是保存第一列,而是保存整行,然后您可以拆分它,然后使用循环打印差异:

awk 'NR>1{for(i=1;i<=NF;i++) printf "%d ", $i - a[i] ; print ""}
                                          {p=split($0, a)}' file

如果您需要列标题,则可以使用BEGIN打印它。

答案 1 :(得分:1)

$ awk 'NR<3; NR>3{for (i=1;i<=NF;i++) printf "%d%s", $i-p[i], (i<NF?OFS:ORS)} {split($0,p)}' file | column -t
col1  col2  col3
----  ----  ----
1     1     8
-1    5     -13