ファイルがあります。
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
2番目の列の場合$0
完全な入力レコードを含みます。
- 修正が完了したら、履歴を印刷する必要があります。デフォルトの動作は、
$0
if条件がtrueの場合に印刷することです。1
通常このような場合に使用されます
答え2
++NF/—NF
アップデート1:次の違いがどれだけ大きいかを説明します。mawk 1/2
gawk/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