相邻数据行之间的差异,具有多列

时间:2016-08-09 06:24:19

标签: awk

如果我有:

1  2  3  4  5  6  .  .
3  4  5  4  2  1  .  .
5  7  5  7  2  0  .  .
.
.

我想显示相邻数据行的差异,以便显示:

2  2  2  0 -3 -5  .  .
2  3  0  3  0 -1  .  .
.
.

我找到帖子difference between number in the same column using AWK,并根据第二个答案进行调整,我认为这样做可以做到这一点:

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

但是这会产生单列的输出。如何让它保留数据的列结构?

3 个答案:

答案 0 :(得分:1)

$ cat tst.awk
NR>1 {
    for (i=1; i<=NF; i++) {
        printf "%2d%s", $i - p[i], (i<NF ? OFS : ORS)
    }
}
{ split($0,p) }

$ awk -f tst.awk file
 2  2  2  0 -3 -5
 2  3  0  3  0 -1

答案 1 :(得分:0)

尝试这样的事情:

awk '{for (i=1; i <= NF; i++) { c[i] = $i - c[i] }; count = NF }
     END { for (i = 1; i <= count; i++) { printf c[i] " "}}' numbers

答案 2 :(得分:0)

写出:

$ cat > subtr.awk
{
    for (i=1; i<=NF; i++) b[i]=a[i]
    # for (i in a) b[i]=a[i]
    n=split($0,a)
}
NR > 1 {
    for (i=1; i<=NF; i++) {
    #for(i in a) {
        printf "%s%s", a[i]-b[i], (i==n?ORS:OFS)
    }
delete b
}

测试它:

$ awk -f subtr.awk file
2 2 2 0 -3 -5
2 3 0 3 0 -1