다음과 같은 시간 단계가 포함된 데이터 파일이 있습니다 1024
.
1 0.240112 0.0610352 1.00659
2 0.240112 0.0610352 1.00659
...
1024 0.237366 0.0576172 1.00189
나는 두 가지 일을 하고 싶다 -
- N개 행마다 값의 평균을 계산하여 행 수를 N배만큼 줄입니다. 예를 들어 N=16의 경우 1024/16=64행의 데이터가 남게 됩니다.
- 기하급수적으로 증가하는 행 수의 평균을 구합니다. 예를 들어, 2^N개 행(1-2, 3-4, 5-8, 9-16 등)마다 평균을 구하려는 경우입니다. 이 경우에는 log_2(1024)=10줄이 남습니다.
grep
이 작업을 수행하기 위해 또는 awk
그러한 명령을 사용할 수 있습니까 ?
답변1
첫 번째 작업:
awk '
BEGIN {
N = 16;
}
{
for(i = 1; i <= NF; i++) {
arr[i] += $i;
}
}
NR % N == 0 {
for(i = 1; i <= NF; i++) {
printf "%s ", arr[i] / N;
}
print "";
delete arr;
}' input.txt
두 번째 작업:
awk '
BEGIN {
N = 2;
}
{
for(i = 1; i <= NF; i++) {
arr[i] += $i;
}
}
NR % N == 0 {
for(i = 1; i <= NF; i++) {
printf "%s ", arr[i] / (N - M);
}
print "";
delete arr;
M = N;
N *= 2;
}' input.txt