Perintah cut Linux: ambil field, karakter, dan bita

Perintah cut mengambil bagian tertentu dari setiap baris, berdasarkan posisi bita, posisi karakter, atau nomor field yang dipisahkan delimiter. Untuk mengambil kolom sederhana, gunakan -f dan tentukan pemisah dengan -d jika bukan tab. Cut tidak memahami aturan pengutipan CSV yang kompleks.

Field adalah bagian baris di antara karakter pemisah, sedangkan delimiter berarti karakter pemisah itu sendiri. Mode -f menggunakan tab secara bawaan. Pilih -c atau -b untuk masukan berdasarkan posisi, dengan memperhatikan implementasi dan pengodean karakter yang dipakai.

Sintaks dasar

cut -d PEMISAH -f DAFTAR [BERKAS]...

PEMISAH, DAFTAR, dan BERKAS pada sintaks tersebut adalah penanda yang perlu diganti, bukan teks perintah yang langsung dijalankan. Nomor field atau posisi dimulai dari 1. Daftar seperti 1,3 memilih nomor 1 dan 3, 2-4 memilih 2 sampai 4, dan 3- memilih nomor 3 sampai akhir. Untuk satu perintah, pilih satu mode utama: -f, -c, atau -b.

Tanpa nama berkas, cut membaca masukan standar, misalnya keluaran perintah lain melalui pipa. Hasil dikirim ke keluaran standar, biasanya layar terminal. Opsi yang tersedia bergantung pada implementasi dan versinya; periksa cut --version, cut --help, dan man cut pada GNU cut.

Contoh ekstraksi dari berkas

Ambil field pertama yang dipisahkan titik dua

Di Linux, berkas /etc/passwd menyimpan entri akun lokal dengan field yang dipisahkan titik dua. Untuk mengambil field pertama, yaitu nama akun dalam berkas tersebut, gunakan:

cut -d ':' -f 1 /etc/passwd

Hasil berisi satu nama akun per baris. Nama dan jumlahnya mengikuti isi sistem Anda, sehingga tidak ada daftar keluaran yang sama untuk semua komputer. Perintah ini hanya membaca /etc/passwd dan tidak mengubah akun. Hasilnya mencakup isi berkas itu, bukan otomatis semua akun dari layanan direktori jaringan.

Pilih beberapa field

cut -d ':' -f 1,7 /etc/passwd

Field 1 dan 7 pada entri /etc/passwd adalah nama akun dan shell masuknya. Misalnya, entri latihan demo:x:1000:1000:Demo:/home/demo:/bin/bash akan menghasilkan demo:/bin/bash. Karakter pemisah keluaran secara bawaan mengikuti pemisah masukan.

Cut menulis field menurut urutannya dalam masukan, bukan urutan angka dalam daftar opsi. Jadi cut -d ':' -f 7,1 /etc/passwd tetap menampilkan field 1 lalu 7. Jika perlu menukar urutan kolom, gunakan alat yang dapat menyusun ulang field, seperti awk.

Ambil delapan posisi pertama

Buat direktori latihan kosong agar berkas contoh tidak menimpa data penting. Siapkan teks ASCII dengan printf 'abcdefghij\n1234567890\n' > sample.txt, lalu jalankan:

cut -c 1-8 sample.txt

Hasilnya abcdefgh lalu 12345678 pada dua baris terpisah. Rentang 1-8 mencakup kedua batasnya. Jika baris lebih pendek, bagian yang tersedia saja yang ditampilkan; cut tidak menambahkan karakter untuk memenuhi delapan posisi. Pada teks ASCII ini, satu karakter memakai satu bita, sehingga -c dan -b memberikan hasil yang sama.

Lihat hasil ekstraksi melalui pipa

Contoh berikut membuat dua baris data sederhana, lalu mengambil field pertamanya. Simbol | meneruskan keluaran printf sebagai masukan cut:

printf 'alpha:100\nbeta:200\n' | cut -d: -f1

Hasilnya:

alpha
beta

Di sini -d: menentukan titik dua sebagai pemisah dan -f1 memilih field pertama. Bentuk ini setara dengan memberi spasi antara opsi dan argumennya, seperti -d ':' -f 1. Baris masukan tetap dalam urutan semula; cut tidak menyortir atau menggabungkan nilai yang sama.

Opsi dan bentuk daftar

Opsi atau bentuk Kegunaan
-d PEMISAH Tentukan karakter pemisah field untuk mode -f; bawaan adalah tab.
-f DAFTAR Pilih nomor atau rentang field.
-c DAFTAR Pilih posisi karakter; perhatikan dukungan multibita pada implementasi dan versi yang dipakai.
-b DAFTAR Pilih posisi bita; pemotongan dapat mengenai bagian tengah karakter multibita.
-s Pada mode field, jangan tampilkan baris yang tidak mengandung pemisah.
1,3 / 2-4 / 3- Pilih posisi terpisah, rentang tertutup, atau rentang sampai akhir, dengan nomor dimulai dari 1.

Contoh tab dapat dicoba tanpa berkas: printf 'alpha\t100\nbeta\t200\n' | cut -f 2 menghasilkan 100 lalu 200. Tab dan spasi adalah karakter yang berbeda. Menggunakan -d dengan satu spasi tidak otomatis berarti semua jenis spasi putih menjadi pemisah.

Batasan yang perlu diperhatikan

Baris tanpa pemisah tetap ditampilkan secara bawaan

printf 'alpha:100\nnote\n' | cut -d ':' -f 2 menghasilkan 100 lalu note. Baris note tidak mempunyai titik dua dan diteruskan utuh, meskipun Anda meminta field kedua. Tambahkan -s untuk menyaring baris semacam itu: printf 'alpha:100\nnote\n' | cut -s -d ':' -f 2 menghasilkan hanya 100.

Jangan menyamakan baris tanpa delimiter dengan field kosong. Pada alpha::300, field kedua ada tetapi kosong; ekstraksi field kedua menghasilkan baris kosong. Opsi -s tidak menghapus baris ini karena delimiter memang ada di masukan.

Spasi berulang dan CSV memerlukan perhatian khusus

Dengan cut -d ' ' -f2, dua spasi berturut-turut membuat field di antaranya kosong. Karena itu, teks yang kolomnya diratakan dengan jumlah spasi berbeda dapat memberikan hasil yang tidak Anda maksud. Panduan awk dalam bahasa Inggris menjelaskan pemrosesan field yang lebih fleksibel. GNU Coreutils 9.11 juga mendokumentasikan opsi -w untuk deretan spasi putih, tetapi jangan menganggapnya tersedia pada versi lama; periksa bantuan lokal sebelum memakainya.

Memilih koma dengan -d tidak membuat cut menjadi pengurai CSV. Pada data seperti "Jakarta, Indonesia",100, koma di dalam tanda kutip tetap terbaca sebagai pemisah. CSV dengan kutipan, koma dalam nilai, atau field beberapa baris memerlukan parser CSV yang memahami format tersebut.

Bita tidak selalu sama dengan karakter yang terlihat

UTF-8 dapat memakai beberapa bita untuk satu karakter. Opsi -b menghitung bita, sehingga hasil yang terpotong dapat menjadi UTF-8 tidak valid. Dukungan -c perlu dilihat menurut versi: manual GNU cut 8.32 menyatakan bahwa -c masih bekerja seperti -b; manual GNU Coreutils 9.11 menjelaskan pemilihan karakter dan menghitung karakter penggabung secara terpisah. Jangan menganggap posisi karakter sama dengan lebar kolom di layar.

Untuk teks non-ASCII, gunakan locale dan implementasi yang mendukung pengodean masukan, lalu periksa hasil dengan contoh kecil sebelum memproses berkas penting. Contoh sample.txt di atas sengaja memakai ASCII agar hasil delapan posisinya tidak bergantung pada perbedaan dukungan multibita.

Simpan hasil terpisah dari masukan

Gunakan cut -c 1-8 sample.txt > sample-cut.txt untuk menulis hasil ke berkas berbeda, lalu periksa sample-cut.txt. Pengalihan > menimpa tujuan yang sudah ada. Jangan arahkan keluaran ke sample.txt itu sendiri karena shell dapat mengosongkannya sebelum cut membaca data.

FAQ

Bisakah cut mengambil kolom yang dipisahkan beberapa spasi?

Bentuk -d dengan satu spasi memperlakukan setiap spasi sebagai pemisah, sehingga spasi berturut-turut dapat membentuk field kosong. Untuk teks yang pemisahnya deretan spasi tidak tetap, awk biasanya lebih sesuai; opsi khusus cut harus diperiksa menurut implementasi dan versinya.

Dokumentasi

Definisi opsi umum tersedia pada manual GNU cut yang ditayangkan di man7. Perbedaan pemilihan karakter dan opsi spasi putih dijelaskan dalam sumber manual GNU Coreutils 9.11, bagian cut invocation.