Apakah Anda kesulitan membandingkan kesamaan atau perbedaan antara dua file dari baris perintah Linux? Jangan khawatir; di artikel ini, kami akan memandu Anda tentang cara melakukan tugas-tugas tersebut tanpa alat eksternal, hanya dengan menggunakan perintah bawaan.
File Contoh
Sebelum melanjutkan, perhatikan dua file berikut yang akan kami gunakan sebagai contoh untuk mendemonstrasikan semua contoh perintah yang akan dibahas dalam artikel ini:
file1.txt
1
2
2
3
4
5
6
7
8
9
file2.txt
1
2
3
4
5
6
7
8
9
Seperti yang Anda lihat dengan jelas, ‘1’ dan ‘2’ diulang di kedua file, tetapi yang mengejutkan, ‘2’ dideklarasikan beberapa kali di file pertama, dan ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ adalah perbedaan antara kedua file.
Mencari String Umum Antara Dua File
Hal pertama yang kita lakukan adalah mencari string umum antara kedua file, dan untuk itu, Anda dapat menggunakan beberapa perintah Linux. Demi artikel ini, saya akan fokus pada dua perintah Linux: awk dan grep.
- Menggunakan perintah awk:
Untuk mencari string serupa antara kedua file yang tidak diulang, Anda dapat menggunakan perintah awk berikut:
$ awk 'NR==FNR{a[$1]++;next} a[$1] ' file1.txt file2.txt
Output:
1
2
Anda dapat melihat bahwa perintah ini dengan mudah mencetak string ‘1’ dan ‘2’ yang sama antara kedua file. Untuk memahami opsi mana yang kami gunakan bersama dengan perintah, perhatikan daftar di bawah ini:
NR==FNR{a[$1]++;next}
: Ini akan membandingkan dua file dengan memecah setiap string sebagai kunci dalam array asosiatif, kemudian meningkatkan nilainya ke baris berikutnya.a[$1]
: Ini digunakan untuk memproses file kedua, jadi jika bidang pertama (di file pertama) dari baris saat ini ada di file kedua, maka awk akan mencetak baris tersebut.
- Menggunakan perintah grep:
Untuk membandingkan string umum antara dua file menggunakan grep, Anda dapat menggunakan perintah berikut:
$ grep -o -w -F -f file1.txt file2.txt | sort | uniq -c
Output:
2 1
2 2
Di mana:
-o
: Ini akan memastikan hanya mencetak bagian yang cocok dari baris daripada seluruh baris.-w
: Ini memastikan mencocokkan seluruh kata saja, bukan mencocokkan substring dalam kata yang lebih panjang.-F
: Ini memastikan memperlakukan pola sebagai string tetap daripada ekspresi reguler, yang berguna saat mencari string literal.-f file1.txt file.2.txt
: Ini adalah file yang akan digunakan untuk mencari pola.sort
: Perintah ini digunakan untuk mengurutkan baris teks secara alfanumerik.uniq -C
: Perintah ini digunakan untuk menghapus baris duplikat dari file yang diurutkan dan untuk menghitung jumlah kejadian dari setiap baris unik.
Mencari Perbedaan Antara Dua File
Mencari perbedaan antara dua file adalah tugas yang berbeda dari membandingkan kesamaan. Misalnya, di kedua file, string ‘2’ adalah umum, tetapi di file pertama, string tersebut diulang dua kali, dan di file kedua, string tersebut diulang sekali, jadi bagaimana menurut Anda tambahan dua akan dianggap sebagai kesamaan atau perbedaan antara kedua file tersebut?
- Menggunakan perintah diff:
Mari kita cari tahu dengan menggunakan perintah diff untuk memeriksa string mana yang ada di file pertama tetapi tidak ada di file kedua.
$ diff file1.txt file2.txt | grep '<' | cut -c 3
Output:
2
Seperti yang diharapkan, ‘2’ tambahan dianggap sebagai perbedaan antara kedua file tersebut. Oleh karena itu, saat membandingkan dua file, jumlah pengulangan string tunggal harus cocok di antara keduanya.
- Menggunakan perintah comm:
Mari kita cari tahu string mana yang ada di file kedua tetapi tidak ada di file pertama menggunakan perintah comm:
$ comm -13 <(sort file1.txt) <(sort file2.txt)
Output:
3
4
5
6
7
8
9
Kali ini, jika Anda perhatikan, ‘2’ tidak muncul di output; sebagai gantinya, kita mendapatkan ‘6’, ‘7’, ‘8’, dan ‘9’, yang tidak ada di file pertama. Alasan ‘2’ tidak muncul adalah karena string tersebut hanya diulang sekali di file kedua. Oleh karena itu, saat membandingkan file, mereka dianggap memiliki kesamaan daripada perbedaan.
Kesimpulan
Dengan menggunakan perintah Linux bawaan seperti awk, grep, diff, dan comm, Anda dapat dengan mudah membandingkan dua file untuk menemukan kesamaan dan perbedaannya. Perintah ini menawarkan fleksibilitas dan kekuatan dalam mengelola dan menganalisis data teks di lingkungan Linux.