Общий подход:
$ awk '{ count[$2]++ }
END {
for (name in count)
printf("%s signed %d time(s)\n", name, count[name])
}' <file
Harold signed 1 time(s)
Dan signed 1 time(s)
Sebastian signed 1 time(s)
Suzie signed 4 time(s)
Jordan signed 2 time(s)
Suzan signed 1 time(s)
Т. е. использовать ассоциативный массив/хэш для хранения количества просмотров определенного имени. В блоке END
переберите все имена и распечатайте сводку для каждого.
Для более удобного форматирования измените заполнитель %s
в вызове printf()
на что-то вроде %-10s
, чтобы зарезервировать 10 символов для имен (по левому краю -по ширине ).
$ awk '{ count[$2]++ }
END {
for (name in count)
printf("%-10s signed %d time(s)\n", name, count[name])
}' <file
Harold signed 1 time(s)
Dan signed 1 time(s)
Sebastian signed 1 time(s)
Suzie signed 4 time(s)
Jordan signed 2 time(s)
Suzan signed 1 time(s)
Больше возни с выводом (, потому что мне скучно):
$ awk '{ count[$2]++ }
END {
for (name in count)
printf("%-10s signed %d time%s\n", name, count[name],
count[name] > 1 ? "s" : "" )
}' <file
Harold signed 1 time
Dan signed 1 time
Sebastian signed 1 time
Suzie signed 4 times
Jordan signed 2 times
Suzan signed 1 time
Вы обсуждаете разницу между не -упреждающим и упреждающим планированием.
не -упреждающий (также называемый кооперативным )немного проще (таймер не требуется ), и ему не нужны блокировки при взаимодействии потоков. Примеры Apple Mac OS9 и более ранние версии, я думаю ранняя MS -Windows, множество встроенных систем и микропотоки -.
Итак, таймер нужен. Однако на ваш вопрос о простейшем оборудовании. Unix нуждается в MMU, а это гораздо сложнее, чем таймер. (На самом деле существуют Unix-подобные системы, в которых нет MMU, и во многих ситуациях они работают одинаково (различия заключаются в :отсутствии безопасности, отсутствии подкачки/пейджинга)
Еще один способ разрешить переключение задач для случая while true
. Является ли использовать инъекции кода. Компилятор или загрузчик будет внедрять код для совместной работы. Это может быть трудно сделать. :Загрузчику может не хватать информации, чтобы знать, где она нужна. Это может нарушить предположения об атомарности. При правильном языке и компиляторе это возможно можно было бы сделать хорошо. Однако я не знаю ни одного примера.