한 열의 인접한 값 간의 차이를 새 열에 인쇄

한 열의 인접한 값 간의 차이를 새 열에 인쇄

파일이 있어요

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

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

관련 정보