我有一个文件
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
包含整个输入记录
- 修改完成后,需要打印记录。默认操作是打印
$0
if 条件为 true 的内容。1
通常用于这种情况
答案2
更新 1:说明和++NF/—NF
之间的差异有多大:mawk 1/2
gawk/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