2016-08-24 3 views
2

У меня есть текстовый файл с n количеством строк (разделенных запятыми) и столбцами, и я хочу найти среднее значение для каждого столбца, исключая пустое поле.awk среднее значение для каждого столбца в файле

Образец ввода выглядит следующим образом:

1,2,3 
4,,6 
,7, 

Нужный выход:

2.5, 4.5, 4.5 

Я попытался с

awk -F',' '{ for(i=1;i<=NF;i++) sum[i]=sum[i]+$i;if(max < NF)max=NF;};END { for(j=1;j<=max;j++) printf "%d\t",sum[j]/max;}' input 

Но он рассматривает последовательные разделители как один и смешивания колонн. Любая помощь очень ценится.

+1

Первое поле в среднем, вероятно, следует 2.5? –

+0

Да, Извините за ошибку – ajilesh

ответ

2

Вы можете использовать этот Однострочник:

$ awk -F, '{for(i=1; i<=NF; i++) {a[i]+=$i; if($i!="") b[i]++}}; END {for(i=1; i<=NF; i++) printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS)}' foo 
2.5 4.5 4.5 

В противном случае, вы можете сохранить это в файле script.awk и запустить awk -f script.awk your_file:

{ 
    for(i=1; i<=NF; i++) { 
     a[i]+=$i 
     if($i!="") 
      b[i]++} 
    } 
END { 
    for(i=1; i<=NF; i++) 
     printf "%s%s", a[i]/b[i], (i==NF?ORS:OFS) 
} 
+0

Сработало отлично. Большое спасибо. – ajilesh

Смежные вопросы