나는 다음과 같은 데이터 구조를 가지고 있습니다.
X 43808504 G 1 ^]. <
X 43808505 C 3 . 4
X 43808506 T 8 . ?
X 43808507 G 5 . C
4번째 열에서 최대값(8), 최소값(1), 평균값(4.25)을 가져와서 파일에 쓰고 싶습니다.
데이터를 정렬한 후 삭제하려고 시도했지만 이는 비효율적인 것 같습니다.
당신의 도움에 감사드립니다
답변1
사용 awk
:
awk 'NR == 1 { min = $4; max = $4 }
{
sum += $4
if ($4 > max) {
max = $4
}
if ($4 < min) {
min = $4
}
} END {
print max
print min
print sum / NR
}' input
먼저 min
및 변수를 행 1 열 4의 값으로 설정하고 나중에 열 4의 각 값을 확인하여 현재 값보다 max
작거나 큰지 확인 하고 그렇다면 다음 으로 설정합니다.min
max
min
저것값.
sum
그런 다음 4열의 모든 값의 합계를 포함하는 변수를 만듭니다 . 나중에 이 변수는 합계를 총 행 수로 나누어 평균을 계산하는 데 사용됩니다.
마지막으로 최대값, 최소값, 평균값을 인쇄합니다.
답변2
그리고밀러
$ mlr --nidx --repifs stats1 -a 'min,max,mean' -f 4 data
1 8 4.250000
다음을 추가하여 일반적인 방법으로 출력을 파일로 리디렉션할 수 있습니다.> file
그리고GNU 데이터 혼합
$ datamash -W min 4 max 4 mean 4 < data
1 8 4.25