将列中相邻值之间的差异打印到新列

将列中相邻值之间的差异打印到新列

我有一个文件

A 1
A 2
A 4
A 6

我想将第 2 列中的相邻值(上方和下方)之间的差异打印到新的第 3 列,以获得此结果

A 1
A 2 1
A 4 2
A 6 2

我发现了一些东西像这样,但未能将其打印为新列。

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

答案1

修改有问题的给定代码

$ awk 'NR>1{$3=$2-p} {p=$2} 1' file 
A 1
A 2 1
A 4 2
A 6 2
  • 字段从 索引1,因此$2用于第二列
    • $0包含整个输入记录
  • 修改完成后,需要打印记录。默认操作是打印$0if 条件为 true 的内容。1通常用于这种情况

答案2

更新 1:说明和++NF/—NF之间的差异有多大:mawk 1/2gawk/nawk

  • 二 *完全地来自同一点单调递增整数的不同结果集

    -- 一线希望是我偶然发现你可以创建这些倾斜的图案,而无需实际进行任何额外的格式化

=

% jot 25 | 
  mawk '($(NF+=NR)=(++NF+(++NF)-NR)^$!NF)_' CONVFMT='%.310g' |
  gcut -c 1-40

1 6  
2  49  
3   512  
4    6561  
5     100000  
6      1771561  
7       35831808  
8        815730721  
9         20661046784  
10          576650390625  
11           17592186044416  
12            582622237229761  
13             20822964865671168  
14              799006685782884096  
15               32768000000000000000  
16                1430568690241985314816
17                 662499529194594317107
18                  32441509098952484034
19                   1674995299100251530
20                    909494701772928265
21                     51813187127544463
22                      3090315438263261
23                       192590438003727
24                        12518490081473
25                         8472886094430

=

% jot 25 | 
 gawk '($(NF+=NR)=(++NF+(++NF)-NR)^$!NF)_' CONVFMT='%.310g'|
 gcut -c 1-40

1   4
2    9
3     8
4      1
5       0
6        1
7         -128
8          6561
9           -262144
10            9765625
11             -362797056
12              13841287201
13               -549755813888
14                22876792454961
15                 -1000000000000000
16                  45949729863572160
17                   -221861110674043699
18                    112455406951957397
19                     -5976303958948914
20                      3325256730079651
21                       -19342813113834
22                        11745628765211
23                         -743477136140
24                          489876293096
25                           -3355443200

===================

mawk{1,2} 'NR<NF ? _=$NF :$++NF=-_+(_=$(NF-!__))'
 {n,g}awk 'NR<(__=NF) ?_=$__:ORS=" "(-_+(_=$__))RS'

     mawk 'NR<2?_=$2:$3=-_+(_=$2)'    # if you like hard-coding
                                      #  in the constants

=

A 1
A 2 1
A 4 2
A 6 2

相关内容