Недавно понадобилось сделать простую операцию над текстовым файлом: посчитать минимальную/максимальную длину строки. Звучит элементарно, ща быстренько состряпаем что-нибудь из cat + wc + sort… Только надо подобрать правильную комбинацию параметров и xargs вставить. С наскока, разумеется, не получилось. На питоне ради этого писать лениво, и в итоге на StackOverflow было найдено решение с awk:

awk '{print length}' input.txt | sort -rn | head

На чистом awk минимум будет выглядеть так (решение предложено ChatGPT):

awk 'NR == 1 || length < min { min = length } END { print min }' input.txt

Еще проще будет посчитать среднюю длину строки:

awk '{total += length} END {print total/NR}' input.txt 

Раньше я обычно игнорировал решения на awk, потому что они были не очень понятны в отличие от различных комбинаций grep, sed, cut, wc, sort и прочих: они достаточно простые, и “делают одну вещь хорошо”. А если что-то серьезное возникало — то писал что-то на питоне.

Но после описанного случая решил немного почитать про awk и, оказывается, он из коробки поддерживает построчную обработку (питонячий бойлерплейт), разбивку на поля (cut) и регулярки (grep/sed). Достигается это за счет довольно интересной концепции: каждая строка проверяется по паттерну(ам) — условию/регулярке, и если она соответствует, то выполняется действие в фигурных скобках. В общем, планирую попробовать.

Хотя можно не париться и просто ChatGPT попросить скрипт написать.