Mam plik tekstowy zawierający różne słowa w wierszu.
Jak znaleźć 12 najczęściej pojawiających się linii w pliku i wyświetlić je?
Nie jestem zbyt dobry w poleceniach skryptowych.
Gdybym mógł uzyskać polecenie i wyjaśnienie, aby zrozumieć, jak go używać i poszerzyć swoją wiedzę na temat poleceń, byłoby świetnie!
Odpowiedzi:
Możesz to łatwo zrobić za pomocą wbudowanych poleceń.
sort
. Potrzebujemy tego do następnego kroku.uniq -c
. Policzy niepowtarzalne wystąpienie każdej linii. Jeśli podobne linie nie sąsiadują ze sobą, nie działałoby to bez sortowania wcześniej.sort
, który sortuje teraz w odwrotnej kolejności (r
) i na podstawie numerycznej (n
) interpretacji danychuniq
wyjściowych. Musimy opcję liczbową ponieważ inaczej, przestrzeń przed numerami doprowadziłoby do błędnych wyników (patrz GNUsort
pomocy „s dłużej).head
.Poleceniem byłoby wtedy:
Dane wyjściowe zawierają rzeczywistą liczbę wystąpień.
Aby uzyskać tylko nieprzetworzoną listę linii, możesz przesłać dane wyjściowe do
sed
:Przykład:
Wyjście z pierwszego polecenia, ale tylko wybierając 2 z
head
:Dane wyjściowe z drugiego polecenia:
źródło
uniq
.sort -rn
sortuje w odwrotnej kolejności, używając jako pola sortowania liczby obok każdej wyprodukowanej liniiuniq -c
? Myślałem, że coś takiegok1
lub coś w tym stylu zostanie użyter
odwraca in
sortuje numerycznie według liczby wyprodukowanej przezuniq
. Co dokładnie masz na myślik1
?man
i zrozumiałem, że-k
do wybrania pola do sortowania należy użyć składni używającej czegośJeśli Twoja dystrybucja ma logtop
Jeśli Twój plik stale rośnie, podobnie jak plik dziennika, spróbuj:
źródło