파일의 숫자 증가

파일의 숫자 증가

우리 서버에서 cronjob은 공유 디렉터리의 파일 수를 기록합니다. 로그 형식은 다음과 같습니다.

2003-07-03T16:05 279
2003-07-03T16:10 283
2003-07-03T16:15 282

지금까지 파일에는 백만 개가 넘는 항목이 있습니다. 나는 지금까지 우리가 경험한 가장 큰 변화(부정적, 긍정적)를 찾는 데 관심이 있습니다. 이를 찾기 위한 프로그램을 작성할 수 있지만 증분 목록을 제공할 수 있는 도구가 있습니까?

원본 파일은 Solaris에 있지만 Linux Mint 시스템에 파일 사본이 있습니다.

답변1

패키지가 있는 경우num-utils설치 후 다음을 수행할 수 있습니다.

cut -d ' ' -f 2 inputfile | numinterval | sort -u 

첫 번째와 마지막 숫자는 각각 최소값을 나타냅니다. 가장 큰 변화.

목록이 너무 길고moreutils설치 후 다음을 수행할 수 있습니다.

cut -d ' ' -f 2 inputfile | numinterval | sort -u | pee "tail -1" "head -1"

Mint에서는 이러한 패키지를 설치할 수 있어야 하고, Solaris에서는 소스에서 컴파일해야 할 수도 있습니다.

답변2

$ awk 'BEGIN{last=0}{delta[NR]=$2-last; last=$2; print $0" "delta[NR]}' file

당신에게 줄 것이다

2003-07-03T16:05 279 279
2003-07-03T16:10 283 4
2003-07-03T16:15 282 -1

마지막 열에는 증분이 있으므로 가장 큰 열을 찾으려면 파이프를 정렬하면 됩니다.

$ awk 'BEGIN{last=0}{delta[NR]=$2-last; last=$2; print $0" "delta[NR]}' file | sort -k3n
2003-07-03T16:15 282 -1
2003-07-03T16:10 283 4
2003-07-03T16:05 279 279

그러나 수백만 개의 항목에 대해서는 매우 느릴 것입니다. mysql대신 또는 다른 데이터베이스를 사용할 수도 있습니다 .

답변3

가장 큰 차이가 있는 두 줄을 표시합니다.

awk '{c=$2-a[2];
      if(c<0)c=-c;
      if(+a[2]&&c>b){b=c;d=a[1]" "a[2]"\n"$0};
      split($0,a," ")}
  END{print "Difference is",b,"between:\n"d}'

관련 정보