2015-07-07 5 views
0

Я хочу написать скрипт, который получает среднее значение из двух столбцов файла, где первый столбец равен, я сделал это с awk. она работает, но на выходе были данные экспоненциальный формат
121323e + 2
я изменил печать на PRINTF и я добавил% F для поплавкаawk average in decimal

awk ' 
    NR>1{ 
     arr[$1] += $2 
     arr2[$1] += $3 
     count[$1] += 1 
    } 
    END{ 
     for (a in arr) { 
      printf "%4.3f", a " " arr[a]/count[a] " " arr2[a]/count[a] 
     } 
    } 
' t1.txt > t2.txt 

У меня есть проблемы с этой частью:

printf "%4.3f", a " " arr[a]/count[a] " " arr2[a]/count[a] 
  • Я хочу, чтобы ввести после каждой PRINTF линии
  • пространства не существует на выходе

выход:

0001204.0001125.0001118.0001053.0001046.0001039.000901.000822.000815.000808.000750 

, который я хотел

0001 204.000 1125.000 
1118.000 1053.000 1046.000 
1039.000 901.000 822.000 
815.000 808.000 750 
+2

Пожалуйста, разместите вывод, который вы получите, и то, что вы ожидаете. Также вы указываете только 1 поплавок в вашем printf, тогда как вы пытаетесь распечатать 2. Попробуйте 'printf '% i% 4.3f% 4.3f", a, arr [a ]/count [a], arr2 [a]/count [a] ' – 123

ответ

2

Предполагая, что остальная часть кода делает то, что вы хотите, вы должны изменить printf к чему-то вроде этого:

printf "%4.3f %4.3f %4.3f\n", a, arr[a]/count[a], arr2[a]/count[a] 

Здесь я включил один спецификатор формата для каждого вставленного значения и добавил новую строку \n до конца. Каждое значение затем разделяется запятыми.