나는 가끔 간단한 통계를 계산하기 위해 awk 스크립트를 작성하는 경우가 있습니다. 예를 들어 히스토그램, 평균, 표준 편차 또는 값의 분산 등을 계산합니다.
보조 배열/변수 및 절 등의 for 루프를 사용하여 이 작업을 반복적으로 수행하는 것은 END
약간 지루하고 오류가 발생하기 쉽습니다.
존재하다길이런 종류의 작업을 위한 정말 훌륭한 구문이 있습니다.중합. 개념/API는 다음과 유사합니다.Boost C++ 라이브러리의 누산기.
그래서 제 질문은: 그러한 통계를 쉽게 반복적으로 계산할 수 있도록 유사한 개념/구문을 제공하는 awk 변형이 있습니까?
이 구문의 상상력이 풍부한 예는 다음과 같습니다.
$ someawk '{ @time[$1] = avg($2) }' measurements.log
prog1 150
prog2 200
....
(여기서 첫 번째 열에는 프로그램 이름이 포함되고, 두 번째 열에는 단일 측정의 실행 시간, measurements.log
각 프로그램에 대한 여러 측정값이 포함되고, 집계 함수는 avg
평균을 계산합니다.)
답변1
awk는 간단한 텍스트 처리를 위해 설계되었습니다. 더 많은 것을 원한다면 awk를 버리고 더 강력한 언어를 사용해야 합니다.
진주자연스러운 진행입니다. 이는 awk 및 유사한 구문의 대부분의 기능을 가지며 대부분의 비임베디드 UNIX 시스템에 기본적으로 설치됩니다. 나는 당신이 설명하는 통계 분석을 수행할 수 있는 라이브러리를 알지 못하지만 다음이 있습니다.많은 도서관저기.
통계 분석을 위해 선택한 언어는 다음과 같습니다.오른쪽. 텍스트 처리에서는 awk보다 약하므로 데이터가 이미 R이 이해할 수 있는 형식이 아닌 한 awk를 R로 파이프하여 먼저 처리해야 합니다. 보다단일 명령으로 숫자 목록의 최소값, 최대값, 중앙값 및 평균을 얻는 방법이 있습니까?귀하의 예와 유사하게 R을 사용하는 예입니다.