Powiedz, że mam plik zawierający:
A
A
A
B
CC
Chcę mieć takie dane wyjściowe:
A 3
B 1
CC 1
text-processing
Cheng
źródło
źródło
uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
sort | uniq
A \ A \ A \ B \ A \ CC
, wynik po prostuuniq -c
pokaże,A 3
a później pokażeA 1
. Sortowanie w pierwszej kolejności zagwarantuje, że wszystkie identyczne linie zostaną zgrupowane razemWłaśnie przyszedłem tutaj z podobnym problemem. Z tego udało mi się zebrać nieco bardziej zaawansowane polecenie, które, mam nadzieję, będzie przydatne dla innych.
Jak powiedział Steven D w powyższych komentarzach,
uniq
liczy tylko sąsiednie powtarzające się linie, więc najpierw musisz posortować linie. Następnie znajdujemy unikalne linie, a następnie sortujemy ponownie, aby najczęściej występujące linie były na górze.Dane wyjściowe są przekierowywane do pliku
output.txt
. Jeśli chcesz tylko wyświetlić wyniki w wierszu poleceń, usuń przekierowanie i zmień ostatnie polecenie nasort -n
tak, aby najczęstsza linia znajdowała się na dole, tj. Zdecydowanie nadal na ekranie.źródło
cat file.txt | sort
justsort file.txt
. :)cat
czegoś bardziej interesującego. Ponieważ wiesz, nie macat
.< file.txt sort | uniq -c
. Jest to łatwe do edycji i wciąż unika niepotrzebnychcat
.