次の時間ステップを含むデータファイルがあります1024
。
1 0.240112 0.0610352 1.00659
2 0.240112 0.0610352 1.00659
...
1024 0.237366 0.0576172 1.00189
私は2つのことをしたい -
- 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
2番目のタスク:
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