Jak wydrukować tylko zduplikowane wartości z pliku tekstowego?


68

Załóżmy, że istnieje kolumna wartości liczbowych, takich jak:

Plik 1:

1 
2
3
3
3
4
4
4
5
6

Chcę wynik:

3  
4

Oznacza to, że tylko powtarzające się linie. Czy są jakieś narzędzia wiersza poleceń, aby dowiedzieć się tego w Linuksie? (Uwaga: wartości są sortowane numerycznie).


3
Zobaczyć man uniq.
jasonwryan

Odpowiedzi:


118

Możesz użyć uniq(1)do tego:

uniq -d file.txt

Spowoduje to wydrukowanie tylko duplikatów. Plik wejściowy musi być posortowany w taki sposób, aby wszystkie duplikaty były następujące po sobie (jak się wydaje), więc najpierw uruchom sortowanie, jeśli tak nie jest.


1
co jeśli chcę, aby wydrukowano tylko trzy egzemplarze?
MiNdFrEaK

8
@MiNdFrEaK sort | uniq -c | grep '^\s*3\s' | sed 's/^\s*[0-9]*\s*//'dla trzech powtórzeń; zamień „3” na N dla N-płytek
full.stack.ex 22.10

@MiNdFrEaK sort | uniq -c | sed -n 's/^[[:blank:]]*3[[:blank:]]\{1,\}//p'dla trzech powtórzeń

@camh, czy możesz to zrobić również na plikach csv? tylko wartości z określonej kolumny?
NumenorForLife,

1
sort file.txt | uniq -d
ron

1

Korzystanie uniqi awk:

cat File1  | uniq -c | awk '$1 > 1 { print $2 }'

6
To działa, ale nie rozumiem, dlaczego przesyłacie dane wyjściowe cat?
Bernhard

1
nie każdy wie, że możesz to zrobić uniq -c File1i podobnie z wieloma innymi narzędziami. Prawdopodobnie o to tu chodzi.
Matthias

1

Wykonaj to: perl -ne 'print if $a{$_}++' filename.txt


Daje 3\n3\n4\n\4nwejściowy plik 1, który jest oczywiście błędny.
yaegashi,

snip Perla, który odwiedzam, podaje liczbę przypadków każdego wiersza, dzięki czemu można go odpowiednio potokować, sortować i filtrować: perl -ne '$ a {$ _} ++; END {while (($ k, $ v) = każdy% a) {printf "% d \ t% s", $ v, $ k}} 'nazwa pliku
Theophrastus

Czy można to zrobić w określonej kolumnie oddzielonej danym separatorem pól?
Geremia,

Jak wskazał yaegashi, potrzebna jest niewielka poprawka, aby spełnić wymagania: perl -ne 'print if 1 == $ a {$ _} ++' filename.txt Spośród wszystkich odpowiedzi jest to moja ulubiona, ponieważ inne odpowiedzi wymagają pełnego przetworzenia wszystkich danych. Ta odpowiedź uruchamia wyniki wyjściowe szybciej i wydajniej.
BOC
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.