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:

bash
printf 'Budi Santoso\nSiti Rahayu\n' > nama.txt
tr 'a-z' 'A-Z' < nama.txt
tr 'A-Z' 'a-z' < nama.txt

Output yang Dihasilkan:

text
BUDI SANTOSO
SITI RAHAYU
budi santoso
siti rahayu

Mari kita bedah baris per barisnya:

  1. Baris 1 (printf ... > nama.txt): membuat fixture dua nama orang.
  2. 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.
  3. 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:

bash
printf 'budi1984\nsiti1990\nandi2001\n' > user.txt
tr -d '0-9' < user.txt
printf 'baris    dengan     spasi    berulang\n' > teks.txt
tr -s ' ' < teks.txt

Output yang Dihasilkan:

text
budi
siti
andi
baris dengan spasi berulang

Perintah 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:

bash
printf 'budi\n' > nama.txt
tr 'a-z' 'A-Z' nama.txt 2>&1

Output yang Dihasilkan:

text
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:

bash
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.txt

Output yang Dihasilkan:

text
budi	jakarta
siti	bandung
andi	surabaya
budi,jakarta
siti,bandung
andi,surabaya
budi	siti	andi

Mari kita bedah baris per barisnya:

  1. Baris 1-2: membuat dua file daftar — nama dan kota dengan urutan yang sesuai.
  2. Baris 3 (paste pnama.txt pkota.txt): pasangan kolom dipisah TAB — karakter TAB tidak terlihat di layar, tetapi ada di antara budi dan jakarta.
  3. Baris 4 (paste -d ','): pemisah diganti koma — siap dipakai sebagai CSV sederhana.
  4. Baris 5 (paste -s pnama.txt): satu file saja dirangkai menjadi satu baris: budi, siti, dan andi berjajar 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:

bash
printf 'budi siti andi rini joko\n' > peserta.txt
tr ' ' '\n' < peserta.txt | paste -sd ',' -

Output yang Dihasilkan:

text
budi,siti,andi,rini,joko

Cara kerjanya hanya dua langkah:

  1. Bagian tr ' ' '\n' < peserta.txt: setiap spasi diganti baris baru — lima nama kini berdiri sebagai lima baris.
  2. Bagian paste -sd ',' -: -s merangkai seluruh baris, -d ',' memakai koma sebagai pemisah, dan - menyuruh paste membaca 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) .