paste perintah: pengaturan (beberapa) pembatas


9

Di Linux, saya memiliki masalah berikut dengan pastedari (GNU coreutils) 8.13:

Mencoba untuk menetapkan pembatas lain dari hasil default (TAB) baik mencetak karakter pertama dari pembatas yang ditentukan atau mengabaikannya dengan sempurna.

Pertanyaan : Bagaimana cara mendefinisikan (banyak) pembatas saat menggunakan paste ?

Cukup menggunakan, misalnya abc-123 sebagai pembatas akan menyenangkan. Dengan "banyak" yang saya maksud misalnya, 2 TABS, bukan satu.


Pola yang melingkupi pembatas yang saya coba sejauh ini adalah

  • --delimiters="\delimiter"
  • --delimiters='\delimiter'
  • --delimiters=$"\delimiter"
  • --delimiters=$'\delimiter'

Semua dengan hasil yang sama: Hanya karakter pertama yang diterima atau diabaikan sempurna. Saya juga sudah mencoba versi singkat -d"\"dan beberapa instance & ndahs; tidak ada.

Juga:

  • --delimiters="\\" → Pesan kesalahan

Apa yang bekerja dengan sempurna, meskipun bukan yang saya inginkan:

  • --delimiters="\n" → baris baru
  • --delimiters="\0" → tidak ada peralihan
  • --delimiters="\t"TAB, standarnya. Bagus.

Jawaban:


17

Untuk memiliki di abcantara file1 dan file2, Anda dapat melakukan:

paste -d abc file1 /dev/null /dev/null file2

Atau:

paste -d abc file1 - - file2 < /dev/null

Jika Anda ingin dua tab:

paste file1 /dev/null file2

" menggunakan /dev/nulluntuk membuat dua kolom dalam pemrosesan teks " berfungsi (selain itu: apakah pengetahuan umum ini telah saya lewatkan sejauh ini dan jika tidak: dari mana Anda mendapatkan informasi ini?)
erch

1
@ Chirp.NotLuke. /dev/nullbertindak seperti file kosong saat membaca, jadi Anda menempel file1, dan mengosongkan file, dan mengosongkan file, file2 dengan pemisah, pada gilirannya a,, bdan c. Detail tentang cara -dkerja di pastehalaman manual.
Stéphane Chazelas

@ StéphaneChazelas dapatkah Anda menambahkan pr -mts'abc' file1 file2sebagai alternatif?
Sundeep

4

Itu karena Anda hanya memberikan dua file untuk bergabung, setiap karakter string pembatas digunakan di antara setiap gabungan garis dari masing-masing file input.

misalnya

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...

2

Pada sistem BSD (bukan Linux sepengetahuan saya), ada lamutilitas (seperti pada "laminasi"), yang lebih cepat dan lebih pendek daripada solusi di atas:

lam file1 -s delimiter file2
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.