Apakah ada perintah unix yang dapat memeriksa apakah ada dua baris dalam file yang sama?
Untuk misalnya Pertimbangkan file sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Kami melihat kalimat itu
This is sentence X
diulangi.
Apakah ada perintah yang dapat dengan cepat mendeteksi ini, sehingga saya mungkin dapat menjalankannya seperti ini -
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
text-processing
search
Kode biru
sumber
sumber
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
akan menjadi sedikit lebih efisien dan akan menghindariarg list too long
masalah potensial .Bukan yang Anda inginkan, tetapi Anda dapat mencoba menggabungkan
sort
danuniq -c -d
:2
di sini adalah jumlah duplikasi yang ditemukan untuk baris, dariman uniq
:sumber
JIKA isi file sesuai dengan memori
awk
baik untuk ini. Satu-liner standar di comp.lang.awk (Saya tidak bisa mencari contoh dari mesin ini tapi ada beberapa setiap bulan) untuk mendeteksi ada duplikasiawk 'n[$0]++'
yang menghitung kemunculan setiap nilai baris dan mencetak setiap kejadian (s) selain yang pertama, karena tindakan default adalahprint $0
.Untuk menampilkan semua kejadian termasuk yang pertama, dalam format Anda, tetapi mungkin dalam urutan campuran ketika lebih dari satu nilai digandakan, menjadi sedikit lebih rumit:
Ditampilkan dalam beberapa baris untuk kejelasan, Anda biasanya berjalan bersama dalam penggunaan nyata. Jika Anda sering melakukan ini, Anda dapat meletakkan
awk
skrip dalam fileawk -f
, atau tentu saja semuanya dalam skrip shell. Seperti yang paling sederhanaawk
ini dapat dilakukan dengan sangat miripperl -n[a]
.sumber