GNU/Linux >> Belajar Linux >  >> Linux

Perintah Uniq di Linux Dijelaskan Dengan Contoh

Pelajari cara menggunakan perintah uniq di Unix dan Linux dengan contoh-contoh praktis ini.

Perintah uniq di Unix dan Linux digunakan untuk memfilter teks duplikat. Ini dapat digunakan dengan sendirinya tetapi biasanya digunakan bersama dengan perintah lain seperti mengidentifikasi informasi yang berlebihan dalam sebuah file.

Berikut sintaks dari perintah uniq:

uniq [options] <input-file> <output-file>

Saat Anda menjalankan uniq tanpa opsi, ia akan menggunakan stdin dan stdout untuk input dan output.

Meskipun penggunaan stdin dimungkinkan menggunakan clipboard (salin/tempel), ini bukanlah penggunaan yang paling praktis.

Alih-alih, Anda mungkin ingin menggunakan perintah ini pada file yang Anda curigai berisi informasi duplikat.

Salah satu batasan dari perintah uniq adalah hanya akan mengidentifikasi duplikat yang berdekatan, atau bersebelahan, dalam file. Ini cukup mudah, tetapi izinkan saya menunjukkan kepada Anda sebuah contoh sehingga Anda dapat melihatnya beraksi.

[[email protected] ~]$ cat apple.txt
apple
apple
orange
orange
apple 
orange
[[email protected] ~]$ uniq apple.txt 
apple
orange
apple 
orange

Jadi, Anda langsung tahu bahwa Anda tidak dapat mempercayai program untuk mengidentifikasi setiap duplikat sendiri. Ada beberapa cara untuk menyiasatinya dan biasanya dengan perintah sort.

Saya akan menunjukkannya kepada Anda nanti di artikel ini. Pertama, izinkan saya membahas beberapa contoh untuk membiasakan Anda dengan 'uniq' sebelum mencampurkan perintah lain dan hal-hal yang berpotensi membingungkan.

7 contoh perintah uniq di Linux

Saya menggunakan log sistem nyata tetapi mengeditnya untuk tujuan demonstrasi. Sebagian besar file telah diurutkan ke dalam urutan yang berdekatan, tetapi saya meninggalkan beberapa baris "tidak pada tempatnya" untuk menunjukkan fungsionalitas perintah uniq.

https://gist.github.com/abhishekpc/7dada8c6e57fd5b854f9d2dae72dddb0DOWNLOAD CONTOH FILE TEKS

Contoh 1:Menggunakan perintah uniq dengan cara default

Meskipun saya sudah menunjukkan ini kepada Anda, mari kita lihat file contoh kami menggunakan sintaks default.

[[email protected] ~]$ uniq sample_log_file.txt 
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device is a keyboard
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device removed
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: is tagged by udev as: Keyboard
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
/usr/lib/gdm3/gdm-x-session[1443]: (II) systemd-logind: got fd for /dev/input/event10 13:74 fd 55 paused 0
/usr/lib/gdm3/gdm-x-session[1443]: (II) This device may have been added with another device file.
PackageKit: get-updates transaction /354_eebeebaa from uid 1000 finished with success after 1514ms
wpa_supplicant[898]: RRM: Ignoring radio measurement request: Not RRM network

Anda dapat melihat bahwa banyak baris duplikat digabungkan, tetapi masih memiliki informasi yang berlebihan. Ini karena keterbatasan fungsional yang sudah saya jelaskan. Mari kita lihat beberapa contoh lagi dan periksa beberapa opsi yang ada di dalam utilitas baris perintah 'uniq'.

Contoh 2:Keluarkan hasil yang difilter ke file tujuan

Anda mungkin ingin menyimpan hasil ini sehingga Anda dapat dengan mudah mengedit atau menyimpannya. Anda dapat mengarahkan output kami ke file terpisah alih-alih stdout (terminal) normal. Penting untuk dicatat bahwa Anda tidak dapat menggunakan format ini untuk mengganti file asli.

[[email protected] ~]$ uniq sample_log_file.txt uniq_log_output.txt 

Berikut isi dari file output:

[[email protected] ~]$ cat uniq_log_output.txt 
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device is a keyboard
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device removed
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: is tagged by udev as: Keyboard
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
/usr/lib/gdm3/gdm-x-session[1443]: (II) systemd-logind: got fd for /dev/input/event10 13:74 fd 55 paused 0
/usr/lib/gdm3/gdm-x-session[1443]: (II) This device may have been added with another device file.
PackageKit: get-updates transaction /354_eebeebaa from uid 1000 finished with success after 1514ms
wpa_supplicant[898]: RRM: Ignoring radio measurement request: Not RRM network

Contoh 3:Menggunakan '-c' untuk mendapatkan jumlah baris berulang

Opsi ini cukup jelas. Program akan menambahkan hitungan ke awal setiap baris.

[[email protected] ~]$ uniq sample_log_file.txt -c
      2 /usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
      2 /usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device is a keyboard
      1 /usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device removed
      2 /usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: is tagged by udev as: Keyboard
      5 /usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
      1 /usr/lib/gdm3/gdm-x-session[1443]: (II) systemd-logind: got fd for /dev/input/event10 13:74 fd 55 paused 0
      7 /usr/lib/gdm3/gdm-x-session[1443]: (II) This device may have been added with another device file.
      1 PackageKit: get-updates transaction /354_eebeebaa from uid 1000 finished with success after 1514ms
      8 wpa_supplicant[898]: RRM: Ignoring radio measurement request: Not RRM network

Contoh 4:Hanya mencetak baris berulang dengan '-d'

Seperti yang Anda lihat, hanya baris yang diduplikasi di seluruh file yang ditampilkan, jika Anda menggunakan opsi -d dari perintah uniq.

[[email protected] ~]$ uniq sample_log_file.txt -d
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device is a keyboard
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: is tagged by udev as: Keyboard
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
/usr/lib/gdm3/gdm-x-session[1443]: (II) This device may have been added with another device file.
wpa_supplicant[898]: RRM: Ignoring radio measurement request: Not RRM network

Contoh 5:Hanya cetak baris unik dengan '-u'

Di sini, Anda mendapatkan output kebalikan dari perintah sebelumnya. Tak satu pun dari perintah ini diulang dalam file.

[[email protected] ~]$ uniq sample_log_file.txt -u
/usr/lib/gdm3/gdm-x-session[1443]: (II) event9  - Intel HID events: device removed
/usr/lib/gdm3/gdm-x-session[1443]: (II) systemd-logind: got fd for /dev/input/event10 13:74 fd 55 paused 0
PackageKit: get-updates transaction /354_eebeebaa from uid 1000 finished with success after 1514ms

Contoh 6:Abaikan bidang atau karakter dengan uniq ['-f' dan '-s']

Ini benar-benar dua contoh, tetapi fungsinya hampir identik. Saya akan menjelaskan cara kerjanya dan kemudian memberikan kejelasan tentang perbedaan di antara keduanya.

Masing-masing menggunakan sintaks berikut

Skip fields with:
uniq <source_file> -f N
Skip characters with:
uniq <source_file> -s N

Dalam setiap contoh ini, 'N' adalah jumlah item yang ingin Anda lewati. Saat Anda melewati jumlah item ini, uniq akan memulai perbandingan pada titik itu daripada membandingkan seluruh baris.

Opsi 'f' akan melewati jumlah bidang yang ditetapkan. Kolom akan ditafsirkan menggunakan ruang kosong.

[[email protected] ~]$ cat field_separated_values.txt 
blue fish
blue fish
blue fish
blue class
red fish
green fish
two class
two class

Jika Anda ingin menggunakan perintah uniq pada kolom kedua, Anda harus melewati kolom pertama seperti ini:

[[email protected] ~]$ uniq -f1 field_separated_values.txt  
blue fish
blue class
red fish
two class

Seperti yang Anda lihat, dibutuhkan 'ikan merah' dan 'ikan hijau' sebagai baris yang sama karena bidang pertama (dengan warna) telah diabaikan. Jika Anda menggunakan opsi hitung di sini, ini akan menunjukkan jumlah baris unik yang ditemukan:

[[email protected] ~]$ uniq -f1 -c field_separated_values.txt  
      3 blue fish
      1 blue class
      2 red fish
      2 two class

Mengapa Anda membutuhkan itu? Saya akan memberi Anda skenario praktis. Banyak file log memiliki stempel waktu di awal baris. Jika Anda hanya ingin menemukan baris unik dalam file seperti itu, Anda dapat melewati kolom pertama dengan stempel waktu dengan opsi -f.

Demikian pula, Anda dapat melewati sejumlah karakter tertentu.

[[email protected] ~]$ uniq -s 10 field_separated_values.txt 
blue    fish

Contoh 7:Gunakan '-w' untuk membandingkan hanya N karakter

Opsi '-w' memungkinkan kita untuk menentukan jumlah karakter yang tepat untuk digunakan dalam perbandingan kita.

Jika Anda menggunakan file log untuk beberapa contoh sebelumnya, itu tidak masalah. Saya ingin membuat teks perbandingan sedikit lebih sederhana untuk membatasi kebingungan. Jika tidak, mari tarik kembali dan lihat apa yang terjadi jika Anda hanya menggunakan karakter pertama untuk menemukan duplikat.

[[email protected] ~]$ uniq -w 4 sample_log_file.txt 
/usr/lib/gdm3/gdm-x-session[1443]: (II) No input driver specified, ignoring this device.
PackageKit: get-updates transaction /354_eebeebaa from uid 1000 finished with success after 1514ms
wpa_supplicant[898]: RRM: Ignoring radio measurement request: Not RRM network

Semua baris yang dimulai '/usr' sekarang diidentifikasi sebagai "sama" dari perspektif program.

Ini mungkin terbukti membantu jika Anda mencari peristiwa log tertentu.

Bonus:Hindari kecocokan yang tidak lengkap menggunakan 'sort' dan 'uniq' secara bersamaan.

Anda dapat menjalankan perintah ini secara terpisah untuk mencapai efek yang sama, tetapi jika Anda belum pernah menggunakan pipa (karakter |) di Linux, ini adalah cara yang bagus untuk mempelajarinya.

Anda dapat menggunakan pipa untuk menggabungkan perintah yang berbeda untuk menyelamatkan kita dari penekanan tombol dan meningkatkan alur kerja kita. Perintah akan dijalankan sesuai urutan saat diketik.

Ini adalah contoh input yang akan saya gunakan:

[[email protected] ~]$ cat apple.txt 
apple
orange
orange
apple
apple
banana
apple
banana

Sekarang, mari kita urutkan file input dan kemudian gunakan perintah uniq di atasnya. Perintah sort mengatur ulang teks sehingga semua item berada dalam urutan yang berdekatan terlebih dahulu. Kemudian ketika perintah uniq dijalankan, ia hanya menemukan 3 baris unik dalam file.

[[email protected] ~]$ sort apple.txt | uniq 
apple
banana
orange

Jika Anda membalik urutannya, segalanya akan berubah. Menjalankan perintah 'uniq' terlebih dahulu akan mengidentifikasi hanya duplikat yang berdekatan, dan kemudian masing-masing akan diurutkan ke dalam urutan abjad menggunakan perintah 'sort'.

[[email protected] ~]$ uniq apple.txt | sort
apple
apple
apple
banana
banana
orange

Pipa memungkinkan kita menjalankan beberapa perintah secara bersamaan, tetapi penting untuk mempertimbangkan urutannya.

Perhatikan bahwa isi file tetap tidak berubah seperti saat menjalankan perintah satu per satu. Piping kedua perintah bersama-sama juga menyimpan hasilnya di "memori" sistem. Jika Anda menjalankannya secara terpisah, Anda tidak bisa mendapatkan hasil ini kecuali Anda membuat file baru dan menggunakannya untuk menimpa konten asli sebelum menjalankan perintah kedua Anda.

Kesimpulan

Seperti yang Anda bayangkan, itu membuat ini menjadi konsep penting dalam mempelajari bash. Perintah khusus ini (sort dan uniq) sering digunakan bersama untuk memfilter informasi dengan cepat dari file besar seperti pseudo-log kami.


Linux
  1. Perintah shutdown Linux Dijelaskan dengan Contoh

  2. Perintah nslookup Linux Dijelaskan Dengan Contoh

  3. Perintah Traceroute Linux, Dijelaskan dengan Contoh

  1. Perintah potong Linux Dijelaskan dengan 6 Contoh

  2. perintah whoami di Linux dijelaskan dengan contoh

  3. Perintah Ping Linux Dijelaskan dengan Contoh

  1. Perintah Linux ldd Dijelaskan dengan Contoh

  2. Linux membuat Perintah Dijelaskan Dengan Contoh

  3. Perintah Potong Linux dengan Contoh Praktis