Znajdź zduplikowane linie w pliku i policz, ile razy każda linia była duplikowana?
Załóżmy, że mam plik podobny do następującego:
123
123
234
234
123
345
Chciałbym dowiedzieć się, ile razy "123" było powielane, ile razy " 234 " było powielane, itp. Więc idealnie, wyjście byłoby takie:
123 3
234 2
345 1
7 answers
Zakładając, że jest jedna liczba w linii:
sort <file> | uniq -c
Możesz użyć bardziej wyrazistego znacznika --count
również w wersji GNU, np. na Linuksie:
sort <file> | uniq --count
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 15:13:21
To wyświetli tylko zduplikowane linie , z licznikami:
sort FILE | uniq -cd
Lub, z długimi opcjami GNU (na Linuksie):
sort FILE | uniq --count --repeated
Na BSD i OSX musisz użyć grep aby odfiltrować unikalne linie:
sort FILE | uniq -c | grep -v '^ *1 '
Dla podanego przykładu wynikiem będzie:
3 123
2 234
Jeśli chcesz wydrukować zliczenia dla wszystkich linii łącznie z tymi, które pojawiają się tylko raz:
sort FILE | uniq -c
Lub, z długimi opcjami GNU (na Linuksie):
sort FILE | uniq --count
Dla podane wejście, wyjście to:
3 123
2 234
1 345
Aby posortować wyjście z najczęstszymi liniami na górze, możesz wykonać następujące czynności (aby uzyskać wszystkie wyniki):
sort FILE | uniq -c | sort -nr
Lub, aby uzyskać tylko duplikaty wierszy, najczęściej najpierw:
sort FILE | uniq -cd | sort -nr
Na OSX i BSD ostateczna wersja staje się:
sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:58
Aby znaleźć i policzyć zduplikowane linie w wielu plikach, możesz wypróbować następujące polecenie:
sort <files> | uniq -c | sort -nr
Lub:
cat <files> | sort | uniq -c | sort -nr
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-10 21:06:14
Via awk :
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
W poleceniu awk 'dups[$1]++'
zmienna $1
przechowuje całą zawartość column1, a nawiasy kwadratowe są dostępem do tablicy. Tak więc dla każdej 1. kolumny linii w pliku data
węzeł tablicy o nazwie dups
jest zwiększany.
I na końcu zapętlamy tablicę dups
z num
jako zmienną i wypisujemy zapisane liczby najpierw ich liczbę zduplikowaną przez dups[num]
.
Zauważ, że Twój plik wejściowy ma spacje na końcu niektóre linie, jeśli je wyczyścisz, możesz użyć $0
zamiast $1
w Komendzie powyżej:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-01 13:01:38
W systemie windows za pomocą "Windows PowerShell" użyłem polecenia wymienionego poniżej, aby to osiągnąć
Get-Content .\file.txt | Group-Object | Select Name, Count
Możemy również użyć Cmdletu where-object do filtrowania wyniku
Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-31 13:13:49
Zakładając, że masz dostęp do Standardowej powłoki Uniksa i / lub środowiska cygwin:
tr -s ' ' '\n' < yourfile | sort | uniq -d -c
^--space char
Zasadniczo: Konwertuj wszystkie znaki spacji na linie, następnie posortuj tranlsowane wyjście i podaj je do uniq i policz zduplikowane linie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-15 19:57:12
Jeśli ktoś szuka strony internetowej, która wykonuje podobną pracę:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 14:12:44