Mam plik tekstowy, który zawiera długą listę wpisów (po jednym w każdym wierszu). Niektóre z nich są duplikatami i chciałbym wiedzieć, czy jest możliwe (i jeśli tak, jak) usunąć wszelkie duplikaty. Jestem zainteresowany zrobieniem tego z poziomu vi/vim, jeśli to możliwe.Usuwanie duplikatów wierszy w vi?
Odpowiedz
Spróbuj tego:
:%s/^\(.*\)\n\1$/\1/
Wykonaj kopię choć przed spróbować. Jest nietestowany.
Wybierz linie w trybie Visual linii (Przesunięcie + v), następnie :!uniq
. To tylko złapie duplikaty, które przychodzą jedna po drugiej.
Należy zauważyć, że działa to tylko na komputerach z zainstalowanym programem uniq, tj. Linux, Mac, Freebsd itp. – anteatersa
To będzie najlepsza odpowiedź dla tych, którzy nie potrzebują sortowania. A jeśli jesteś użytkownikiem systemu Windows, rozważ wypróbowanie Cygwin lub MSYS. –
Chciałbym użyć !}uniq
, ale działa to tylko wtedy, gdy nie ma pustych linii.
Dla każdej linii w pliku użyj: :1,$!uniq
.
Chciałbym połączyć dwa z powyższych odpowiedzi:
go to head of file
sort the whole file
remove duplicate entries with uniq
1G
!Gsort
1G
!Guniq
Jeśli byłeś ciekaw ilu zduplikowane wiersze zostały usunięte, użyj sterowania-G przed i po, aby sprawdzić liczbę linii obecne w bufor.
sort -u == sort | uniq –
'' uniq 'nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy. " – hippietrail
Odnośnie sposobu implementacji Uniq w VimL, wyszukaj Uniq w postaci plugin I'm maintaining. Zobaczysz różne sposoby jego implementacji, które zostały podane na liście mailingowej Vim.
W przeciwnym razie, :sort u
jest rzeczywiście drogą do zrobienia.
g/^\(.*\)$\n\1/d
Działa u mnie w systemie Windows. Linie muszą być najpierw posortowane.
Spowoduje to usunięcie linii następującej po linii, która jest jego przedrostkiem:' aaaa' po której następuje 'aaaabb' usunie' aaaa "błędnie. – hippietrail
z linii poleceń po prostu zrobić:
sort file | uniq > file.new
To bardzo przydatne dla mnie ogromny plik. Dzięki! – Rafid
Nie można uzyskać akceptowanej odpowiedzi, ponieważ ': sort u' wisiało na moim dużym pliku. To działało bardzo szybko i idealnie. Dziękuję Ci! – Tgsmith61591
'' uniq 'nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy. " – hippietrail
:%s/^\(.*\)\(\n\1\)\+$/\1/gec
lub
:%s/^\(.*\)\(\n\1\)\+$/\1/ge
to jest moja odpowiedź dla Ciebie, to może usunąć wiele zduplikowanych wierszy i zachować tylko jeden nie usunąć!
awk '!x[$0]++' yourfile.txt
jeśli chcesz zachować kolejność (tzn. Sortowanie jest niedopuszczalne). Aby wywołać go z vim, można użyć :!
.
To jest piękne! Brak konieczności sortowania to * dokładnie * to, czego szukałem! – Cometsong
- 1. Usuwanie duplikatów wierszy (nie usuwaj wszystkich duplikatów)
- 2. Usuwanie wierszy z duplikatów w tablicy numpy
- 3. Usuwanie duplikatów rekordów w PostgreSQL
- 4. usuwanie duplikatów w nsarray
- 5. VBA, usuwanie duplikatów z tablicy
- 6. Usuwanie duplikatów z dużej tabeli
- 7. usuwanie duplikatów ze słownika
- 8. NSMutableArray - usuwanie duplikatów
- 9. Usuwanie duplikatów w języku Python
- 10. Usuwanie kolejnych duplikatów wpisów
- 11. Polecenie przełączanie numerów wierszy w vi
- 12. Zapytanie SQL - usuwanie duplikatów w przypadku więcej niż 3 duplikatów?
- 13. Podstawowy algorytm Hashtable - usuwanie duplikatów
- 14. Usuwanie duplikatów elementów z tablicy
- 15. Usuwanie powtarzających się duplikatów liter
- 16. Usuwanie duplikatów rekordów z tabeli
- 17. Usuwanie duplikatów za pomocą PigLatin
- 18. Dopasuj/grupa duplikatów wierszy (indeksy)
- 19. Wyszukiwanie duplikatów wierszy w programie Excel
- 20. usuwanie duplikatów z tablicy w obiekcie c
- 21. Ruby usuwanie duplikatów w przeliczalnych list
- 22. Usuwanie duplikatów z listy ciągów w python
- 23. Usuwanie duplikatów w przepływie danych SSIS
- 24. vi usuwanie od początku do kursora
- 25. Usuwanie wierszy tabeli w javascript
- 26. Usuwanie podziałów wierszy w Ruby
- 27. jQuery: usuwanie wierszy w DataTables
- 28. Usuwanie zduplikowanych wierszy
- 29. Usuwanie zduplikowanych wierszy z tabeli BigQuery
- 30. Usuwanie duplikatów linii z TStringList bez sortowania w Delphi
Wygląda jak duplikat http://stackoverflow.com/questions/746689/unix-tool-to-remove-duplicate-lines-from-a-file –
Ten ma 1 rok; ten ma 10 miesięcy. Więc na odwrót. – Sydius
@ Konsensus Sydiusa ma teraz na celu ustalenie priorytetu pozyskania (które również masz więcej): http://meta.stackexchange.com/questions/147643/?hl=pl&hl=pl-może--wprowadzić-do-close-a-duplicate-question-even -choć-to-dużo-now-i-ha I to nie są duplikaty, o których nie wspomina się Vima :-) –