Tidak semua pekerjaan teks butuh bahasa sebesar sed atau awk. Sering kita hanya perlu mengubah setiap huruf kecil menjadi huruf besar, membuang semua angka dari sebuah daftar, atau merapatkan spasi yang bertumpuk akibat hasil salin-tempel. Untuk pekerjaan sekecil itu ada tr, utilitas yang menerjemahkan teks karakter demi karakter. Bersamanya kita temui paste, alat penyanding kolom: dua file daftar bisa digabung berdampingan tanpa awk dan tanpa spreadsheet. Keduanya kecil dan cepat, tetapi punya satu aturan masukan yang sering menjegal pemula — kita buktikan aturan itu sendiri di chapter ini.
Mengubah Huruf Besar dan Kecil dengan tr #
tr menerima dua himpunan karakter: setiap karakter dari set1 yang ditemukan di input diganti karakter sepadan pada set2. Notasi a-z dan A-Z berarti rentang huruf — huruf a dipetakan ke A, b ke B, dan seterusnya. Input dibaca dari stdin:
printf 'Budi Santoso\nSiti Rahayu\n' > nama.txt
tr 'a-z' 'A-Z' < nama.txt
tr 'A-Z' 'a-z' < nama.txtOutput yang Dihasilkan:
BUDI SANTOSO
SITI RAHAYU
budi santoso
siti rahayuMari kita bedah baris per barisnya:
- Baris 1 (
printf ... > nama.txt): membuat fixture dua nama orang. - Baris 2 (
tr 'a-z' 'A-Z' < nama.txt): setiap huruf kecil naik menjadi huruf besar; karakter di luar set1 — spasi dan baris baru — diteruskan apa adanya. - Baris 3 (
tr 'A-Z' 'a-z' < nama.txt): arah sebaliknya, huruf besar turun menjadi huruf kecil.
Hasil tr dicetak ke stdout, bukan disimpan ke file. Untuk menyimpannya, arahkan keluarannya: tr 'a-z' 'A-Z' < nama.txt > nama-besar.txt. Konversi huruf seperti ini berguna untuk menyeragamkan data sebelum dibandingkan atau dihitung — misalnya saat kolom kota ditulis campuran Jakarta dan jakarta.
Menghapus dan Merapatkan dengan -d dan -s #
Dua opsi kerja lain milik tr adalah -d (delete) yang membuang karakter tertentu, dan -s (squeeze) yang merapatkan karakter berulang menjadi satu:
printf 'budi1984\nsiti1990\nandi2001\n' > user.txt
tr -d '0-9' < user.txt
printf 'baris dengan spasi berulang\n' > teks.txt
tr -s ' ' < teks.txtOutput yang Dihasilkan:
budi
siti
andi
baris dengan spasi berulangPerintah tr -d '0-9' menghapus semua digit — berguna membersihkan nama pengguna dari angka acak atau mengubah budi1984 menjadi budi. Perintah tr -s ' ' merapatkan spasi berturut-turut menjadi satu spasi — cara tercepat menormalkan teks hasil salin-tempel dari dokumen atau halaman web. Pola sepupunya juga populer: tr '\n' ' ' mengganti setiap baris baru dengan spasi sehingga seluruh file menjadi satu baris panjang.
tr Tidak Menerima Nama File #
Inilah aturan yang dijanjikan di pembuka: tr hanya membaca stdin dan tidak punya parameter nama file. Menuliskan nama file sebagai argumen bukan mengubah file itu, melainkan memicu error:
printf 'budi\n' > nama.txt
tr 'a-z' 'A-Z' nama.txt 2>&1Output yang Dihasilkan:
tr: extra operand ‘nama.txt’
Try 'tr --help' for more information.Menyandingkan Kolom dengan paste #
paste menggabungkan file secara berdampingan: baris pertama file pertama dipasangkan dengan baris pertama file kedua, dipisah karakter TAB. Opsi -d mengganti pemisah, dan -s (serial) memutar arah — seluruh baris satu file digabung menjadi satu baris:
printf 'budi\nsiti\nandi\n' > pnama.txt
printf 'jakarta\nbandung\nsurabaya\n' > pkota.txt
paste pnama.txt pkota.txt
paste -d ',' pnama.txt pkota.txt
paste -s pnama.txtOutput yang Dihasilkan:
budi jakarta
siti bandung
andi surabaya
budi,jakarta
siti,bandung
andi,surabaya
budi siti andiMari kita bedah baris per barisnya:
- Baris 1-2: membuat dua file daftar — nama dan kota dengan urutan yang sesuai.
- Baris 3 (
paste pnama.txt pkota.txt): pasangan kolom dipisah TAB — karakter TAB tidak terlihat di layar, tetapi ada di antarabudidanjakarta. - Baris 4 (
paste -d ','): pemisah diganti koma — siap dipakai sebagai CSV sederhana. - Baris 5 (
paste -s pnama.txt): satu file saja dirangkai menjadi satu baris:budi,siti, danandiberjajar dipisah TAB.
paste berhenti di baris terpendek — bila salah satu file lebih panjang, pasangan ekornya hilang tanpa peringatan. Pastikan kedua file berjumlah baris sama saat menyandingkan data.
Idiom: Merangkai Daftar Menjadi Satu Baris #
Kombinasi khas keduanya muncul saat kita perlu mengubah daftar menjadi satu baris terpisah koma — misalnya menyiapkan nilai untuk query SQL. tr ' ' '\n' memecah tiap kata menjadi baris, lalu paste -sd ',' - merangkai seluruh baris stdin menjadi satu baris:
printf 'budi siti andi rini joko\n' > peserta.txt
tr ' ' '\n' < peserta.txt | paste -sd ',' -Output yang Dihasilkan:
budi,siti,andi,rini,jokoCara kerjanya hanya dua langkah:
- Bagian
tr ' ' '\n' < peserta.txt: setiap spasi diganti baris baru — lima nama kini berdiri sebagai lima baris. - Bagian
paste -sd ',' -:-smerangkai seluruh baris,-d ','memakai koma sebagai pemisah, dan-menyuruhpastemembaca stdin alih-alih file.
tr dan paste menutup daftar alat pengubah teks kita. Kebutuhan berikutnya bersifat lebih sederhana namun muncul paling sering: menghitung — berapa baris, berapa kata, berapa kali sebuah nilai muncul. Itu pekerjaan wc dan pola uniq -c, materi chapter berikutnya. Detail kedua utilitas ini ada di halaman manual tr(1)
dan paste(1)
.