如果我有:
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
但是这会产生单列的输出。如何让它保留数据的列结构?
答案 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