2017-01-11 2 views
1

Поэтому у меня есть текстовый файл, как это:Повторите задание файла AWK для другой переменной

1.0 56 
2.0 48 
1.0 78 
1.0 12 
3.0 68 

1.0, 2.0 являются все идентификатор пользователя и у меня есть до сих 43,0. поэтому я написал сценарий AWK для обработки файла:

BEGIN { 
    total = 0 
} 
{ 
    length = $2 
} 
{ 
    if ($1 == "1.0") { 
    total += length 
    } 
} 
END { 
    printf("%.2f\n",total) 
} 

поэтому в основном он принимает сумму длин пользователя 1.0 и суммирует все. Я должен сделать это и для других пользователей. Какие изменения я должен сделать в скрипте, чтобы он полностью обрабатывал текстовый файл для пользователей 1.0, 2.0, 3.0 и т. Д. И давал итоговые значения для каждого пользователя в качестве вывода (без необходимости изменять файл awk каждый раз, когда мне приходится вычислять для пользователя)

ответ

1

Вы можете сделать что-то подобное в awk

awk '{unique[$1]+=$2}END{for (i in unique) print i,unique[i]}' input-file 

идея является выше создает хэш-карту, с $1 является уникальной записью в массиве, который имеет свои значения из 1.0, 2.0 и т.д. Мы добавляем значение длиной $2 в файл. Поскольку массив индексируется $1, команда обновляет сумму для каждого уникального пользователя в файле. Предложение END выполняется после обработки всех строк, которые в основном распечатывают идентификатор пользователя с рассчитанной суммой.

+0

Спасибо. оно работает – instame

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