Как подсчитать общее количество в списке с несколькими вхождениями

У меня была такая же проблема в Arch Linux 4.14.15 -1 с использованием XFCE на ноутбуке. Я зашел в редактор настроек и сбросил все настройки xfce4 -power -man на значения по умолчанию. Проблема ушла.

1
13.02.2020, 16:24
2 ответа

awkсоздан для этого. Заполните массив (data), индексированный первым полем ($1), накапливая значения из второго поля ($2). После заполнения массива выведите данные с помощью простого цикла for. Направьте вывод через sortдля удобства.

awk '{data[$1]+=$2} END { for( d in data ) { print d, data[d] } }' input | sort
ST8000NC0002: 8
ST900MM0168: 2
ST9300603SS: 3
ST9300605SS: 4
ST9500620SS: 3
WD1003FBYX: 7
WD1500HLFS: 4
WD9001BKHG: 14
1
28.04.2021, 23:23

Использование GNUdatamash:

datamash -W -g 1 sum 2 < file
  • -Wиспользовать пробелы (пробелы/табуляции )в качестве разделителя полей (вместо табуляции)
  • -g 1группа в первом поле
  • sum 2сумма значений во втором поле (на группу)

Выход:

ST8000NC0002:   8
ST900MM0168:    2
ST9300603SS:    3
ST9300605SS:    4
ST9500620SS:    3
WD1003FBYX:     7
WD1500HLFS:     4
WD9001BKHG:     14

Это работает нормально, так как ваш ввод уже отсортирован по первому полю. Для несортированного ввода добавьте опцию -sдля сортировки ввода перед группировкой.

0
28.04.2021, 23:23

Теги

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