Perintah paste Linux: gabungkan baris berkas berdampingan
Perintah paste menggabungkan baris dengan posisi yang sama dari beberapa berkas menjadi satu baris keluaran. Pemisah bawaannya adalah tab; gunakan -d untuk menggantinya atau -s untuk mengubah baris-baris dalam satu berkas menjadi satu baris. Paste mencocokkan posisi baris, bukan nama atau kunci dalam datanya.
Jika cat menyambung isi berkas secara berurutan ke bawah, paste menempatkan baris pertama tiap berkas berdampingan, kemudian baris kedua, dan seterusnya. Ketika salah satu berkas lebih pendek, posisi masukan yang sudah habis menjadi field kosong. Karena itu, paste cocok untuk data yang urutan barisnya sudah selaras.
Sintaks dasar
paste [OPSI]... [BERKAS]...
OPSI dan BERKAS pada sintaks adalah penanda yang perlu diganti. Urutan argumen berkas menentukan urutan kolom keluaran. Tanpa nama berkas, atau jika argumennya berupa -, paste membaca masukan standar. Hasil ditulis ke keluaran standar, biasanya terminal, sehingga berkas asal tidak diubah.
Contoh berikut memakai GNU paste. Periksa paste --version, paste --help, dan man paste untuk mengetahui opsi yang tersedia pada sistem Anda. Salah satu contoh memakai substitusi proses Bash, yang perlu dukungan shell dan sistem operasi sebagaimana dijelaskan di bagian terkait.
Contoh menggabungkan berkas
Buat direktori latihan kosong agar persiapan contoh tidak menimpa data penting. Buat names.txt dengan printf 'Ana\nBob\n' > names.txt dan scores.txt dengan printf '7\n12\n' > scores.txt. Pengalihan > mengganti isi berkas tujuan jika nama itu sudah ada.
Gabungkan dua berkas menjadi kolom
paste names.txt scores.txt
Baris pertama hasil berisi Ana dan 7 yang dipisahkan tab; baris kedua berisi Bob dan 12. Jarak yang terlihat di terminal dapat berbeda karena tab bukan jumlah spasi yang tetap. Data pada baris yang sama harus memang mewakili pasangan yang ingin Anda gabungkan.
Tentukan pemisah sendiri
paste -d ':' names.txt scores.txt
Hasilnya Ana:7 lalu Bob:12 pada dua baris. Opsi -d di sini mengganti tab dengan titik dua. Jika urutan argumen dibalik menjadi paste -d ':' scores.txt names.txt, hasilnya menjadi 7:Ana dan 12:Bob.
Ubah baris dalam satu berkas menjadi satu baris
paste -s -d ',' names.txt
Hasilnya Ana,Bob, diakhiri karakter baris baru. Opsi -s memproses satu berkas sampai selesai sebelum beralih ke berkas berikutnya. Dengan paste -s -d ',' names.txt scores.txt, hasil terdiri dari dua baris: Ana,Bob lalu 7,12. Jadi -s dengan beberapa berkas tidak otomatis menghasilkan satu baris gabungan untuk semua berkas.
Gabungkan dua aliran tanpa membuat berkas latihan
Dalam Bash yang mendukung substitusi proses, keluaran dua perintah dapat diberikan sebagai masukan paste. Contoh ini tidak perlu membuat names.txt atau scores.txt secara manual:
paste -d, <(printf 'Ana\nBob\n') <(printf '7\n12\n')
Hasilnya:
Ana,7
Bob,12
Bentuk <(...) disebut substitusi proses: Bash menyediakan nama jalur yang dapat dibaca untuk memperoleh keluaran perintah di dalam kurung. Jangan beri spasi antara < dan tanda kurung buka. Dukungan ini memerlukan mekanisme seperti named pipe atau /dev/fd dan tidak dijamin oleh sintaks shell POSIX saja. Jika shell menolak bentuk tersebut, jalankan lewat Bash yang mendukungnya atau gunakan dua berkas seperti pada persiapan sebelumnya.
Paste tetap hanya memasangkan baris berdasarkan posisi. Panduan join dalam bahasa Inggris membahas penyambungan berdasarkan nilai kunci yang sama; join juga memerlukan perhatian pada aturan pengurutan masukan. Pilih alat berdasarkan hubungan data, bukan hanya bentuk tampilan yang diinginkan.
Opsi dan bentuk masukan
| Opsi atau bentuk | Kegunaan |
|---|---|
-d DAFTAR |
Gunakan karakter dari daftar sebagai pemisah sebagai pengganti tab. |
-s |
Gabungkan baris secara berurutan untuk tiap berkas, satu berkas pada satu waktu. |
- |
Baca masukan standar pada posisi argumen berkas tersebut. |
Argumen -d merupakan daftar karakter, bukan selalu satu rangkaian pemisah yang disisipkan utuh. Misalnya, paste -d ',;' names.txt scores.txt names.txt menghasilkan Ana,7;Ana lalu Bob,12;Bob. Koma dipakai pada batas kolom pertama dan titik koma pada batas berikutnya. Jika daftar habis sebelum semua batas terpenuhi, penggunaannya berulang dari awal.
Untuk mencampur pipa dan berkas, gunakan printf 'Ana\nBob\n' | paste -d ':' - scores.txt. Argumen - menerima nama dari pipa dan scores.txt menyediakan kolom kedua; hasilnya Ana:7 lalu Bob:12. Menulis beberapa argumen - membaca baris berikutnya dari aliran masukan yang sama, bukan membuat salinan aliran. Contohnya, printf '1\n2\n3\n4\n' | paste -d ',' - - menghasilkan 1,2 lalu 3,4 pada dua baris.
Hal yang perlu diperhatikan
Jumlah baris berbeda menghasilkan field kosong
Untuk mencoba masukan yang lebih pendek, buat scores-short.txt dengan printf '7\n' > scores-short.txt, lalu jalankan paste -d ':' names.txt scores-short.txt. Hasilnya Ana:7 lalu Bob:. Titik dua setelah Bob tetap ada karena posisi kolom kedua kosong. Ini tidak sama dengan nilai angka nol dan tidak berarti paste menemukan skor Bob di tempat lain.
Urutan yang salah dapat menghasilkan pasangan yang salah
Jika scores.txt berisi 12 pada baris pertama dan 7 pada baris kedua, paste akan menghasilkan Ana:12 dan Bob:7. Perintah dapat berhasil tanpa mengetahui bahwa nilai itu tertukar. Periksa asal data, jumlah baris, baris kosong, judul kolom, dan urutan record sebelum menggabungkan. Jumlah baris yang sama saja belum membuktikan bahwa kedua berkas selaras.
Jangan menyortir setiap kolom secara terpisah jika hubungan barisnya perlu dipertahankan. Jika pencocokan harus didasarkan pada identitas record, gunakan masukan yang menyertakan kunci dan alat yang mencocokkan kunci tersebut, bukan paste berdasarkan posisi.
Pemisah koma tidak otomatis membuat CSV yang valid
Paste -d ',' hanya menyisipkan koma di antara masukan. Program tidak otomatis memberi tanda kutip atau melakukan escape pada nilai yang sudah mengandung koma, kutipan, atau baris baru. Untuk membuat CSV dengan nilai semacam itu, gunakan penulis CSV yang menangani pengutipan sesuai format.
Simpan hasil ke tujuan berbeda
Gunakan paste -d ':' names.txt scores.txt > combined.txt untuk menyimpan hasil latihan. Periksa combined.txt sebelum memakainya; pengalihan > menimpa isi tujuan yang sudah ada. Jangan memakai salah satu berkas masukan sebagai tujuan karena shell dapat mengosongkan berkas itu sebelum paste membaca isinya.
FAQ
Apa perbedaan paste dan join?
Paste menyandingkan baris berdasarkan posisinya, sedangkan join menghubungkan baris yang nilai field kuncinya sama. Gunakan paste ketika hubungan antarmasukan sudah ditentukan oleh urutan baris; gunakan join dengan pengurutan yang sesuai ketika harus mencocokkan kunci.
Dokumentasi
Opsi dan bentuk masukan dijelaskan dalam manual GNU paste yang ditayangkan di man7. Persyaratan bentuk <(...) tersedia pada bagian Process Substitution dalam manual GNU Bash yang ditayangkan di man7.




