Вам не нужно ничего знать об этом. Все, что вам нужно знать, это:
- У вас есть столбчатый вывод с одинаковым количеством столбцов в каждой строке.
- Первый столбец - это имя пользователя для входа.
- 4-й столбец - это столбец% MEM.
- Awk автоматически инициализирует переменную в 0.
Ключи индекса Awk являются произвольными значениями:)
ps aux | awk 'NR != 1 {x[$1] += $4} END{ for(z in x) {print z, x[z]"%"}}'
Я передаю ввод в awk, а затем говорю пропустить строку 1 (NR! = 1). Затем для каждой отдельной строки это выглядит по-английски так:
в массиве 'x', увеличить значение в
'x [username]' по значению в 4-м
колонка. Если ключ массива не существует
тем не менее, создайте его, инициализированный в 0, и
затем увеличьте , что на значение в
4-й столбец.
Когда Awk делает это для каждой отдельной строки, он запускает код в блоке 'END', который говорит, что нужно распечатать каждое имя пользователя (z в x), и связанное с ним окончательное агрегированное значение с этим пользователем (x [z]), за которым следует «%».
Если вы хотите, чтобы он строился построчно, вы можете использовать одни и те же основные правила, но добавить печать после каждой строки вместо «END»:
ps aux | awk 'NR != 1 {x[$1] += $4; print $1, x[$1]}'