Попробуйте это
$ awk '{a[substr($0,0,7)]+=$2}END{for(b in a){print b,a[b]}}' myfile
2018-02 22
2019-01 213
2018-03 13
2018-04 9
$
Для сортировки добавьтеsort
$ awk '{a[substr($0,0,7)]+=$2}END{for(b in a){print b,a[b]}}' myfile | sort
2018-02 22
2018-03 13
2018-04 9
2019-01 213
$
Странно. Когда я применяю ваш конвейер к этим данным, я получаю
Sile
Shae
Shae
Shay
Simeon
Рассмотрим конвейер поближе:
cat filename | grep "^.\{0\}S" | cut -d, -f1,6 | sort -s -n -k1,1
Сначала упростим его до
grep "^S" filename | cut -d, -f1,6 | sort -s -n -k1,1
Вам не нужен кот (это иногда называют "злоупотреблением котом" ), и регулярное выражение запрашивает нулевые символы после начала строки, за которыми следует S. Это эквивалентно строке, которая начинается с С.
Почему вы вырезаете поля 1 и 6, когда их всего два? И я не верю, что результат удерживает второе поле. Что-то здесь не так, но давайте проигнорируем странное cut
.
Вы выполняете числовую сортировку. Поскольку в файле нет номера и указано -s
, порядок остается прежним. Снимите -n
и/или -s
.