Ini adalah solusi untuk menghapus baris yang mengandung kata kunci tertentu. Karena Anda menyebutkan file tersebut besar, efisiensi memori sangat penting. Kita tidak boleh memuat seluruh file ke dalam RAM sekaligus.
Berikut adalah dua pilihan: Python (sangat direkomendasikan untuk performa dan stabilitas pada file besar) dan PowerShell (jika Anda ingin menjalankannya langsung di Windows tanpa instalasi tambahan).
Opsi 1: Python (Direkomendasikan)
Script ini menggunakan metode streaming (membaca baris demi baris), sehingga penggunaan RAM tetap kecil meskipun filenya berukuran Gigabytes.
Simpan kode di bawah ini sebagai cleaner.py:
Python
import os
# --- KONFIGURASI ---
input_file = "data_besar.txt" # Nama file asli
output_file = "data_bersih.txt" # Nama file hasil
keywords = ["password", "badword1", "badword2"] # Kata yang ingin dihapus
# -------------------
def remove_lines():
print(f"Sedang memproses {input_file}...")
try:
# Membuka file input (baca) dan output (tulis) secara bersamaan
with open(input_file, 'r', encoding='utf-8', errors='ignore') as infile, \
open(output_file, 'w', encoding='utf-8') as outfile:
removed_count = 0
for line in infile:
# Cek apakah ada keyword di dalam baris ini
# Menggunakan 'any' akan berhenti mengecek segera setelah 1 keyword ditemukan
if any(keyword in line for keyword in keywords):
removed_count += 1
continue # Skip, jangan tulis baris ini
# Jika aman, tulis ke file baru
outfile.write(line)
print(f"Selesai! File bersih disimpan di: {output_file}")
print(f"Total baris yang dihapus: {removed_count}")
except FileNotFoundError:
print(f"Error: File '{input_file}' tidak ditemukan.")
except Exception as e:
print(f"Terjadi kesalahan: {e}")
if __name__ == "__main__":
remove_lines()
Cara Menjalankan:
- Pastikan Python sudah terinstall.
- Simpan script di folder yang sama dengan file text Anda.
- Jalankan di terminal/CMD:
python cleaner.py
Opsi 2: PowerShell
Untuk PowerShell, cara paling cepat pada file besar adalah menggunakan Select-String dengan parameter -NotMatch. Kita akan menggabungkan kata kunci menjadi pola Regular Expression (Regex).
Simpan kode ini sebagai cleaner.ps1:
PowerShell
# --- KONFIGURASI ---
$inputFile = "data_besar.txt"
$outputFile = "data_bersih.txt"
$keywords = @("password", "badword1", "badword2")
# -------------------
Write-Host "Sedang memproses..." -ForegroundColor Cyan
# Menggabungkan keywords menjadi format regex: (password|badword1|badword2)
# [Regex]::Escape digunakan agar karakter spesial dianggap teks biasa
$pattern = ($keywords | ForEach-Object { [Regex]::Escape($_) }) -join "|"
# Membaca dan memfilter
# -NotMatch berarti: Ambil baris yang TIDAK mengandung pola tersebut
Get-Content -Path $inputFile | Select-String -Pattern $pattern -NotMatch | Set-Content -Path $outputFile
Write-Host "Selesai. Hasil disimpan di $outputFile" -ForegroundColor Green
Cara Menjalankan:
- Klik kanan file
cleaner.ps1dan pilih Run with PowerShell. - Atau buka terminal PowerShell, navigasi ke folder, dan ketik:
.\cleaner.ps1
Perbedaan Utama & Rekomendasi
| Fitur | Python | PowerShell |
| Kecepatan | Sangat Cepat (Optimized I/O) | Cukup Cepat (Tergantung versi PS) |
| Penggunaan RAM | Sangat Rendah (Baris per baris) | Sedang (Pipelining kadang memakan memori) |
| Fleksibilitas | Mudah dimodifikasi logikanya | Ringkas, bawaan Windows |
Saran saya: Gunakan Python jika file Anda sangat besar (misalnya di atas 500MB atau bergiga-giga), karena kontrol memorinya lebih stabil.
Tentu, ini adalah pendekatan yang paling aman dan profesional untuk menangani file besar.
Script Python Final: untuk penggunaan inline command
- Arguments (CLI): Menggunakan
-iuntuk input dan opsi-ountuk output. - Safe Overwrite: Jika Anda tidak menyertakan
-o, script akan otomatis menggunakan mode Safe Overwrite. Script akan menulis ke file sementara (.tmp) dulu. Hanya jika proses sukses 100%, file asli akan diganti. Jika script error di tengah jalan atau memori penuh, file asli tetap aman. - Hardcoded Keywords: Keyword tetap ditaruh di dalam kode agar mudah diedit massal.
Simpan file ini sebagai cleaner.py:
Python
import argparse
import os
import sys
# ================= K O N F I G U R A S I =================
# Masukkan kata-kata yang ingin dihapus di sini
KEYWORDS = [
"password",
"badword1",
"badword2",
"error_log",
"debug_info"
]
# =========================================================
def process_file(input_path, output_path, is_overwrite_mode):
print(f"[*] Memproses file: {input_path}")
print(f"[*] Mode Overwrite: {'YA' if is_overwrite_mode else 'TIDAK'}")
removed_count = 0
lines_processed = 0
try:
# Membuka file input dan file output (bisa file baru atau temp)
with open(input_path, 'r', encoding='utf-8', errors='ignore') as infile, \
open(output_path, 'w', encoding='utf-8') as outfile:
for line in infile:
lines_processed += 1
# Indikator progress agar tahu script tidak hang/stuck
if lines_processed % 100000 == 0:
print(f"\rProcess baris ke: {lines_processed}...", end="")
# Cek keyword
if any(k in line for k in KEYWORDS):
removed_count += 1
continue # Skip baris ini
outfile.write(line)
print(f"\rProcess Selesai. Total baris diperiksa: {lines_processed}")
print(f"[*] Baris dihapus: {removed_count}")
# LOGIKA SAFE OVERWRITE
if is_overwrite_mode:
print("[*] Melakukan overwrite file asli dengan aman...")
os.replace(output_path, input_path) # Atomic operation (Aman)
print("[+] File asli berhasil diupdate.")
else:
print(f"[+] File bersih disimpan sebagai: {output_path}")
except MemoryError:
print("\n[!] ERROR: Kehabisan Memori (Sangat jarang terjadi dengan metode ini).")
if is_overwrite_mode and os.path.exists(output_path):
os.remove(output_path) # Hapus file temp sampah
except KeyboardInterrupt:
print("\n[!] Proses dibatalkan pengguna.")
if is_overwrite_mode and os.path.exists(output_path):
os.remove(output_path) # Hapus file temp sampah
except Exception as e:
print(f"\n[!] ERROR: {e}")
def main():
parser = argparse.ArgumentParser(description="Script penghapus baris berdasarkan keyword.")
parser.add_argument("-i", "--input", required=True, help="Path file input (.txt)")
parser.add_argument("-o", "--output", required=False, help="Path file output (Opsional). Jika kosong, akan overwrite file asli.")
args = parser.parse_args()
input_file = args.input
# Cek apakah file input ada
if not os.path.exists(input_file):
print(f"Error: File input '{input_file}' tidak ditemukan.")
sys.exit(1)
# Logika penentuan Output
if args.output:
# User minta file baru
output_file = args.output
overwrite = False
else:
# User tidak minta file baru -> Overwrite Aman
# Kita buat file temporary dulu, misal "bigdata.txt.temp"
output_file = input_file + ".temp_processing"
overwrite = True
process_file(input_file, output_file, overwrite)
if __name__ == "__main__":
main()
Cara Penggunaan (Command Line)
Buka terminal/CMD di folder script:
1. Mode Overwrite (Langsung menimpa file asli)
Gunakan ini jika ingin praktis. Script akan membuat file temp dulu, baru mengganti file asli jika sukses.
Bash
python cleaner.py -i bigdata.txt
2. Mode File Baru (Output terpisah)
Gunakan ini jika ingin menyimpan hasil di file berbeda.
Bash
python cleaner.py -i bigdata.txt -o bigdata_clean.txt
Kenapa script ini aman (Anti Rusak)?
Logika Safe Overwrite yang saya gunakan di baris os.replace(output_path, input_path) bekerja seperti ini:
- Script membaca
bigdata.txtdan menulis hasilnya kebigdata.txt.temp_processing. - File
bigdata.txtyang asli tidak disentuh sama sekali selama proses filtering. - Jika PC mati lampu atau error saat proses baru 50%, file asli masih utuh, file temp tinggal dihapus.
- Hanya setelah 100% selesai, script menukar (swap) file temp menjadi file asli dalam hitungan milidetik.
Apakah Bisa menghapus karakter karakter ASCII atau karakter aneh lainya?
Sangat bisa. Ini adalah fitur yang sering disebut sebagai “Remove non-printable / garbage characters”.
Biasanya, karakter “aneh” ini muncul karena file tersebut hasil dump dari database biner atau kesalahan encoding. Kita akan menambahkan logika untuk mengecek setiap baris: Jika baris mengandung karakter di luar standar ASCII yang bisa dibaca (huruf, angka, tanda baca), baris itu akan dihapus.
Berikut adalah kode yang sudah diperbarui.
Script Python Update (cleaner_v2.py)
Logic tambahannya ada di fungsi is_clean_line. Saya membatasi karakter yang boleh lewat hanya ASCII 32-126 (huruf, angka, simbol keyboard normal) serta Tab dan Enter. Sisanya dianggap sampah.
import argparse
import os
import sys
# ================= K O N F I G U R A S I =================
# 1. Masukkan kata-kata yang ingin dihapus
KEYWORDS = [
"password",
"badword1",
"badword2",
"error_log",
"debug_info"
]
# 2. Hapus baris jika mengandung karakter non-ASCII (karakter aneh)?
# True = Hapus baris yang ada huruf cacing/kotak/emoji/binary
# False = Biarkan karakter aneh, hanya hapus berdasarkan KEYWORDS
REMOVE_NON_ASCII = True
# =========================================================
def is_garbage_line(line):
"""
Mengecek apakah baris mengandung karakter yang tidak bisa dibaca manusia.
Menggunakan range ASCII standar (32-126).
"""
for char in line:
code = ord(char)
# Kita izinkan:
# 9 (Tab), 10 (Line Feed), 13 (Carriage Return)
# 32 sampai 126 (Karakter Keyboard Standar)
if not (32 <= code <= 126 or code in [9, 10, 13]):
return True # Ditemukan karakter aneh/sampah
return False
def process_file(input_path, output_path, is_overwrite_mode):
print(f"[*] Memproses file: {input_path}")
print(f"[*] Mode Hapus Non-ASCII: {'AKTIF' if REMOVE_NON_ASCII else 'MATI'}")
removed_keywords = 0
removed_garbage = 0
lines_processed = 0
try:
# errors='replace' akan mengganti byte error dgn tanda tanya,
# tapi karena kita punya filter is_garbage_line, baris itu tetap akan terbuang nanti.
with open(input_path, 'r', encoding='utf-8', errors='replace') as infile, \
open(output_path, 'w', encoding='utf-8') as outfile:
for line in infile:
lines_processed += 1
# Progress bar sederhana
if lines_processed % 100000 == 0:
print(f"\rProcess baris ke: {lines_processed}...", end="")
# 1. Cek Keyword
if any(k in line for k in KEYWORDS):
removed_keywords += 1
continue # Skip (Hapus)
# 2. Cek Karakter Aneh (Jika diaktifkan)
if REMOVE_NON_ASCII and is_garbage_line(line):
removed_garbage += 1
continue # Skip (Hapus)
# Jika lolos semua filter, tulis ke file baru
outfile.write(line)
print(f"\rProcess Selesai. Total baris diperiksa: {lines_processed}")
print(f"[*] Dihapus karena Keyword : {removed_keywords}")
print(f"[*] Dihapus karena Karakter Aneh : {removed_garbage}")
# LOGIKA SAFE OVERWRITE
if is_overwrite_mode:
print("[*] Melakukan overwrite file asli dengan aman...")
os.replace(output_path, input_path)
print("[+] File asli berhasil diupdate.")
else:
print(f"[+] File bersih disimpan sebagai: {output_path}")
except MemoryError:
print("\n[!] ERROR: Kehabisan Memori.")
except KeyboardInterrupt:
print("\n[!] Proses dibatalkan pengguna. Membersihkan file temp...")
if os.path.exists(output_path):
os.remove(output_path)
except Exception as e:
print(f"\n[!] ERROR: {e}")
def main():
parser = argparse.ArgumentParser(description="Script penghapus baris (Keyword & Non-ASCII).")
parser.add_argument("-i", "--input", required=True, help="Path file input (.txt)")
parser.add_argument("-o", "--output", required=False, help="Path file output (Opsional). Kosongkan untuk overwrite.")
args = parser.parse_args()
input_file = args.input
if not os.path.exists(input_file):
print(f"Error: File input '{input_file}' tidak ditemukan.")
sys.exit(1)
if args.output:
output_file = args.output
overwrite = False
else:
# Buat nama file temp unik agar tidak bentrok
output_file = input_file + ".temp_cleaner_processing"
overwrite = True
process_file(input_file, output_file, overwrite)
if __name__ == "__main__":
main()
