Использование:./count.awk input.txt | column -t -n
#!/usr/bin/gawk -f
{
dates[$1] = $1;
events[$2] = $2;
numbers[$1][$2]++;
}
END {
num_dates=asort(dates);
num_events=asort(events);
for (i = 1; i <= num_events; i++) {
printf " %s", events[i];
}
print "";
for (i = 1; i <= num_dates; i++ ) {
printf "%s ", dates[i];
for (j = 1; j <= num_events; j++) {
printf "%s ", numbers[dates[i]][events[j]];
}
print "";
}
}
Вход(сложный для тестирования)
2017-07-30 A
2017-07-30 D
2017-07-29 D
2017-07-30 B
2017-07-28 E
2017-07-30 B
2017-07-30 A
2017-07-30 A
2017-07-30 C
2017-07-31 A
2017-07-31 B
2017-07-31 C
2017-07-31 B
2017-07-31 C
Выход
A B C D E
2017-07-28 1
2017-07-29 1
2017-07-30 3 2 1 1
2017-07-31 1 2 2
Это библиотека редактирования строки readline(3)
-, которая обычно статически создается как часть bash, но также используется другими программами.
Каждый раз, когда он начинает читать команду от пользователя, readline сохраняет настройки терминала и переводит терминал в «сырой» режим [1], чтобы он мог обрабатывать перемещение точки вставки вправо и влево, вспоминать команды из истории и т. д. Когда readline(3)
возвращает (, например. когда пользователь нажимает Enter ), восстанавливаются исходные настройки терминала. Readline также будет путаться с сигналами, что может привести к некоторому запутанному поведению .
Если вы просматриваете bash
, ищите ioctl(TCSETS*)
(, который реализует tcsetattr(3)
), иioctl(TCGETS)
(tcgetattr(3)
). Это те же самые функции, которые используются в stty(1)
. Если вы запустите bash с --noediting
, вы увидите, что он не трогает настройки терминала.
[1] не совсем "сырой" режим cfmakeraw(3)
; вы можете увидеть точные детали здесь . Все эти настройки терминала задокументированы на справочной странице termios(3)
.