$ awk '{ count[$1,$3]++ } END { for (i in count) { split(i, field, SUBSEP); printf("%s(%d)%s%s\n", field[1], count[i], OFS, field[2]) } }' file
A(1) -07:00
B(2) -05:00
A(2) -06:00
A(1) -05:00
C(3) -06:00
C(1) -05:00
Обратите внимание, что выходные данные могут быть не отсортированы. При необходимости пропустите его через sort
.
Код сохраняет подсчет того, сколько раз первое и третье поля ввода встречались вместе как пара, в массиве count
(с первым и третьим полями в качестве индекса ). В конце мы перебираем индексы массива, разбивая их на исходные первое и третье поля (как field[1]
и field[2]
соответственно )и выводим их вместе со счетчиком в нужном формате.
В альтернативном формате:
Если во входном файле используется один пробел для разделителя полей (, в противном случае используйте awk '{ print $1,$3 }'
вместо cut
):
$ cut -d ' ' -f 1,3 file | sort | uniq -c
1 A -05:00
2 A -06:00
1 A -07:00
2 B -05:00
1 C -05:00
3 C -06:00
Чтобы поменять местами два первых столбца:
$ cut -d ' ' -f 1,3 file | sort | uniq -c | awk '{ print $2, $1, $3 }'
A 1 -05:00
A 2 -06:00
A 1 -07:00
B 2 -05:00
C 1 -05:00
C 3 -06:00
Похоже на проблему энергосбережения -. Он отключает или минимизирует энергопотребление вашей звуковой карты, когда ничего не воспроизводится, по крайней мере, насколько я помню.
Решение состоит в том, чтобы добавить options snd-hda-inel power_save=0 power_save_controller=N
в файл/etc/modprobe.d/alsa-base.conf
Это сработало для меня, дайте мне знать, если это не так!