Saya ada kebutuhan untuk menghapus string pada file text dengan baris yang cukup banyak. Permasalahannya adalah string yang akan dihapus bersifat unik dan ada lebih dari 30k string. Untuk melakukan hal tersebut, saya biasa menggunakan perintah sed dibarengi dengan for loop untuk melakukan looping. Namun saking banyaknya string unik yang harus dihapus, proses looping dan hapus membutuhkan waktu yang cukup lama. Sebagai contoh
file a.txt
aa bb cc zz
file b.txt
gg cc ff bb ia xyz
Hasil yang diinginkan pada file b.txt adalah sebagai berikut
gg ff ia xyz
File a.txt adalah list string yang akan dihapus pada file b.txt. Jika menggunakan perintah sed, prosesnya seperti berikut
for i in `cat a.txt`; do sed -i /$i/d b.txt done
Proses diatas akan melakukan looping string pada file a.txt. Lalu menghapus string yang sesuai dengan data pada file a.txt terhadap file b.txt. Proses ini cukup lama mengingat total string unik pada case yang saya alami ada lebih dari 30k string.
Untuk mempercepat prosesnya, saya menggunakan perintah grep. Perintahnya sebagai berikut
grep -vFf a.txt b.txt > hasil.txt
Perintah diatas akan menghapus string pada file b.txt sesuai dengan string yang ada pada file a.txt. Hasil hapusnya disimpan menjadi file hasil.txt
Dengan perintah grep, proses penghapusan menjadi lebih cepat
Silakan dicoba dan semoga bermanfaat 🙂