파일이 있어요
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
++NF/—NF
업데이트 1: 다음과 같은 차이점이 얼마나 큰지 설명합니다 .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