제목은 내가 원하는 것을 요약합니다. 구체적인 질문: 여러 타임스탬프를 출력하는 몇 가지 명령을 제공하십시오. 예를 들면 다음과 같습니다.
$ 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
그래서 그럭저럭 해냈는데 더 쉬운 방법이 있을 것 같아요. 요약하자면, 여러 줄의 출력이 있는 경우 x
args 단계 크기를 사용하여 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