Saya memiliki file teks yang berisi baris seperti ini:
This is a thread 139737522087680
This is a thread 139737513694976
This is a thread 139737505302272
This is a thread 139737312270080
.
.
.
This is a thread 139737203164928
This is a thread 139737194772224
This is a thread 139737186379520
Bagaimana saya bisa yakin akan keunikan setiap baris?
CATATAN: Tujuannya adalah untuk menguji file, bukan untuk memodifikasinya jika ada duplikat baris.
Jawaban:
sumber
uniq
bukansort -u
uniq
akan menjadi kesalahan besar; itu hanya menghilangkan garis yang berdekatan!sort <file> | uniq -d
akan mencetak duplikatnya.Solusi awk:
sumber
echo
dalamEND
?&& echo
atau|| echo
merupakan konvensi dalam jawaban untuk menunjukkan bahwa suatu perintah melakukan hal yang benar dengan kode status keluar. Yang penting adalahexit(1)
. Idealnya, Anda akan menggunakan ini sepertiif has_only_unique_lines file; then ...
, bukanif [[ $(has_only_unique_lines file) = "no dupes" ]]; then ...
, itu konyol.sort
kehendak juga, terlepas dari apakah ada dupes atau tidak, kan? Bagaimana cara menghemat memori?Menggunakan
sort
/uniq
:Untuk memeriksa hanya garis duplikat, gunakan
-d
opsi untuk uniq. Ini hanya akan menampilkan baris yang duplikat, jika tidak ada yang tidak akan menunjukkan apa-apa:sumber
TLDR
Pertanyaan aslinya tidak jelas, dan membaca bahwa OP hanya menginginkan versi unik dari isi file. Itu ditunjukkan di bawah ini. Dalam bentuk pertanyaan sejak diperbarui, OP sekarang menyatakan bahwa ia hanya ingin tahu apakah isi file itu unik atau tidak.
Uji apakah konten file unik atau tidak
Anda cukup menggunakan
sort
untuk memverifikasi apakah file itu unik atau mengandung duplikat seperti:Contoh
Katakanlah saya punya dua file ini:
file sampel duplikat file sampel unikSekarang ketika kami menganalisis file-file ini, kami dapat mengetahui apakah mereka unik atau mengandung duplikat:
uji duplikat file uji file unikPertanyaan asli (konten unik file)
Dapat dilakukan hanya dengan
sort
:sumber
Saya biasanya
sort
file, lalu gunakanuniq
untuk menghitung jumlah duplikat, maka sayasort
sekali lagi melihat duplikat di bagian bawah daftar.Saya menambahkan satu duplikat ke contoh yang Anda berikan:
Karena saya belum membaca halaman manual untuk
uniq
sementara waktu, saya mengambil cepat mencari alternatif. Berikut ini menghilangkan kebutuhan untuk jenis kedua, jika Anda hanya ingin melihat duplikat:sumber
Jika tidak ada duplikat, semua baris unik:
Deskripsi: Mengurutkan baris file untuk membuat garis yang diulang berturut-turut (urut)
Ekstrak semua baris berurutan yang sama (uniq -d).
Jika ada output dari perintah di atas (
[...]
), maka (&&
) cetak pesan.sumber
Ini tidak akan lengkap tanpa jawaban Perl!
Ini akan mencetak setiap baris non-unik sekali: jadi jika tidak mencetak apa-apa, maka file memiliki semua baris unik.
sumber
Menggunakan
cmp
dansort
dalambash
:atau
Ini akan mengurutkan file dua kali, sama seperti jawaban yang diterima.
sumber