как вычислить среднее значение столбца, которые имеют идентификатор строки?

Предположим, что Вы запускаете с /some/dir.

mkdir -p ./bla/bla/cloud/          # create /some/dir/bla/bla/cloud
cd ./release/                      # cd /some/dir/release
cp -rf ./html/ ./bla/bla/cloud/    # copy to /some/dir/release/bla/bla/cloud

По определению относительный путь изменяется при изменении текущего каталога.

1
19.09.2013, 11:19
3 ответа

Это - по существу то же как Stephane awk решение, но кодированный в Perl. Это сохранит порядок дат:

perl -ane 'if($.==1){print "$F[0]\t$F[2]\n"; next}
           $k{$F[0]}+=$F[2]; $l{$F[0]}++; 
           END{print "$_\t",$k{$_}/$l{$_},"\n" for (sort keys(%k))}' data
3
27.01.2020, 23:13
  • 1
    Очень изящный. +1 для -a переключатель, который был плохо мне знаком –  Joseph R. 05.09.2013, 16:16
awk 'NR==1{print $1,$3; next}
    {v[$1]+=$3;n[$1]++}
    END{for (i in n) print i, v[i]/n[i]}'

Порядок не гарантируется. Если сам вход отсортирован по дате, Вы могли бы распечатать, как только дата изменяется:

awk 'NR==1{print $1,$3; next}
    {if (n && $1 != l) {print l, v/n; n=0; v=0}
     v+=$3; n++; l=$1}
    END{if (n) print l, v/n}'
3
27.01.2020, 23:13
  • 1
    , я сохраняю и запускаю скрипт как ниже, но это не работало. Можно ли уточнить немного. Мое имя файла является потоком #!/bin/bash awk 'НОМЕР == 1 {печать; затем} {v [1$] + = 3$; n [1$] ++} КОНЕЦ {для (я в n) печатает i, v [я]/n [я]}' поток –  AiB 05.09.2013, 13:00
  • 2
    Спасибо, я получил результат теперь, но это не сохраняло хронологический порядок / моим порядком данных. Существует ли так или иначе порядок, мог быть сохранен как во входном файле?Спасибо!! –  AiB 05.09.2013, 13:30

Очень похожий на решение Stephane за исключением того, что это использует в своих интересах awk's GNU PROCINFO["sorted_in"] осуществлять обход массива в хронологическом порядке.

awk 'BEGIN{PROCINFO["sorted_in"]="@ind_str_asc"};
NR==1{print $1,$3; next};
{arr[$1]+=$3; ++arr2[$1]};
END{for (k in arr) print k, arr[k]/arr2[k]}' test.1 | column -t
1
27.01.2020, 23:13

Теги

Похожие вопросы