Bagaimana cara mencetak hanya nilai duplikat dari file teks?


Jawaban:


119

Anda dapat menggunakan uniq(1)ini:

uniq -d file.txt

Ini akan mencetak duplikat saja. File input perlu disortir sedemikian rupa sehingga semua duplikat berurutan (yang tampaknya), jadi jalankan melalui sortir terlebih dahulu jika tidak.


1
bagaimana jika saya ingin rangkap tiga hanya dicetak?
MiNdFrEaK

8
@MiNdFrEaK sort | uniq -c | grep '^\s*3\s' | sed 's/^\s*[0-9]*\s*//'untuk rangkap tiga; ganti "3" dengan sembarang N untuk pelat-N
full.stack.ex

@MiNdFrEaK sort | uniq -c | sed -n 's/^[[:blank:]]*3[[:blank:]]\{1,\}//p'untuk rangkap tiga

@camh dapatkah Anda melakukan ini pada file csv juga? hanya nilai kolom tertentu?
NumenorForLife

1
sortir file.txt | uniq -d
ron

1

Menggunakan uniqdan awk:

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

6
Ini bekerja, tapi saya tidak melihat mengapa Anda menyalurkan output cat?
Bernhard

1
tidak semua orang tahu yang dapat Anda lakukan uniq -c File1dan mirip dengan banyak alat lainnya. Mungkin itulah yang terjadi di sini.
Matthias

1

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


Ini memberi 3\n3\n4\n\4nuntuk input File1 yang jelas salah.
yaegashi

Perl snip saya menemukan diri saya meninjau kembali menyediakan jumlah insiden setiap baris sehingga dapat disalurkan, disortir, dan disaring sesuai kebutuhan: perl -ne '$ a {$ _} ++; END {while (($ k, $ v) = setiap% a) {printf "% d \ t% s", $ v, $ k}} 'nama file
Theophrastus

Apakah ada cara untuk melakukan itu pada kolom tertentu yang dipisahkan oleh pemisah bidang tertentu?
Geremia

Seperti yang ditunjukkan oleh yaegashi, perbaikan kecil diperlukan untuk memenuhi persyaratan: perl -ne 'print if 1 == $ a {$ _} ++' filename.txt Di antara semua jawaban, itu adalah favorit saya, karena jawaban yang lain perlu memproses ulang semua data dengan semacam penuh. Jawaban ini memulai hasil keluaran dengan lebih cepat dan efisien.
BOC

0

uniq mengharuskan daftar Anda untuk dipesan, urutkan default ke abjad

sort | uniq -d path/to/your/filename

atau

cat fileName | sort | uniq -d path/to/your/filename

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.