Команда коллеги собрана из трёх приёмов: вырезать столбец, отсортировать строки и сосчитать одинаковые.
cut вырезает столбец из каждой строки: -d' ' задаёт разделитель — пробел, -f1 — номер столбца. cut -d' ' -f1 access.log печатает адреса. Страница в строке журнала — седьмое слово (-f7), код ответа — девятое (-f9).
sort расставляет строки по алфавиту. uniq -c склеивает повторы одной строки и ставит перед ней их число. Проверь, как uniq справится без sort.
Сосчитай адреса без sort и с ним
В ~/pipe-lab выполни две команды: подсчёт адресов через uniq -c без sort и тот же подсчёт с sort.
Сначала предположи
Что напечатает первая команда, где перед uniq нет sort?
Теперь начни упражнение, выполни команду и сверь прогноз с выводом.
uniq сравнивает каждую строку с предыдущей и склеивает одинаковые, только когда они стоят подряд. В журнале запросы с разных адресов перемешаны, и один адрес попадается много раз вразбивку — каждый кусок uniq считает отдельно. sort ставит одинаковые строки рядом, и после него uniq -c сосчитает каждый адрес целиком. Поэтому перед uniq почти всегда стоит sort.