여러 줄의 슬라이딩 창 처리

여러 줄의 슬라이딩 창 처리

제목은 내가 원하는 것을 요약합니다. 구체적인 질문: 여러 타임스탬프를 출력하는 몇 가지 명령을 제공하십시오. 예를 들면 다음과 같습니다.

$ cat timestamps | sort -n
1508349271820
1508349271821
1508349425222
1508349425223
1508349454218
1508349476419
1508349500018
1508349500020
1508349698820
1508349698822
1508350047721
1508350047724
1508351635621
1508351635623
1508351699618
1508351699620
1508351699621
1508351699622
1508351699623
1508352230120
1508352230123
1508352230124
1508352230125
1508352232219
1508352232220
1508352364919
1508352364920
1508352387618
1508352387619

두 값의 차이를 계산하고 싶습니다. 나는 결국 다음과 같은 일을 했습니다.

$ wc -l timestamps
29

cat <(sort -n timestamps | head -28) <(sort -n timestamps | tail -28) | sort -n | xargs -n 2 sh 'calc $2 - $1' sh
1
153401
1
28995
22201
23599
2
198800
2
348899
3
1587897
2
63995
2
1
1
1
530497
3
1
1
2094
1
132699
1
22698
1

그래서 그럭저럭 해냈는데 더 쉬운 방법이 있을 것 같아요. 요약하자면, 여러 줄의 출력이 있는 경우 xargs 단계 크기를 사용하여 args의 슬라이딩 창을 어떻게 즉시 계산할 수 있습니까?y

답변1

awk는 이 작업을 수행하는 데 적합합니다.

awk 'NR>1{print $1-last} {last=$1}' timestamps

위에서 첫 번째 ( ) NR>1이후의 각 행 에 대해 현재 값에서 $1이전 행의 값을 뺀 값을 인쇄합니다 last. 다음으로 값을 업데이트합니다 last.

$ awk 'NR>1{print $1-last} {last=$1}' timestamps
1
153401
1
28995
22201
23599
2
198800
2
348899
3
1587897
2
63995
2
1
1
1
530497
3
1
1
2094
1
132699
1
22698
1

더 복잡한 계산

다음 코드는 현재 행의 숫자로 시작하여 이전 행의 숫자의 두 배를 더한 다음 이전 5개 행의 숫자의 세 배를 뺍니다.

awk '{a[NR]=$1} NR>5{print a[NR]+2*a[NR-1]-3*a[NR-5]}' timestamps

답변2

설치하다디지털 유틸리티, 파일 또는 데이터를 다음으로 파이프합니다 numinterval.

sort -n timestamps | numinterval

관련 정보