Только Awk:
awk '
{sub(/.*username=/,""); sub(/ .*/,"")}
{a[$0]++}
END {for(i in a) printf "%d\t%s\n",a[i],i | "sort -nr"}
' file.txt
Здесь используется функция sub()
awk для достижения того, что grep -o
делает в других ответах.Он встраивает вызов sort
в сценарий awk.Конечно, вы можете использовать этот канал после сценария awk, а не внутри него, если хотите.
О, и в отличие от других решений awk, представленных здесь, этот (1) является переносимым для не-GNU-awk сред(например, BSD, macOS) и не зависит от того, какое имя пользователя находится в предсказуемом месте в каждой строке (т. е. $ 2).
Почему awk может быть лучшим выбором, чем более простые инструменты, такие как uniq
?Это, вероятно, не так для супер простого требования, как это.Но хорошо иметь в своем наборе инструментов, если вы хотите что-то с возможностью немного больше обработки текста.