1列の隣接する値の差を新しい列に印刷する

1列の隣接する値の差を新しい列に印刷する

ファイルがあります。

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なので、$22番目の列の場合
    • $0完全な入力レコードを含みます。
  • 修正が完了したら、履歴を印刷する必要があります。デフォルトの動作は、$0if条件がtrueの場合に印刷することです。1通常このような場合に使用されます

答え2

++NF/—NFアップデート1:次の違いがどれだけ大きいかを説明します。mawk 1/2gawk/nawk

  • 2 *完全同じ点で単調に増加する整数に対する異なる結果セット

    - 良いことは、実際に追加の書式設定をせずにこれらの傾斜パターンを作成できることを偶然発見したことです。

=

% 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

関連情報