paste komutu: (çoklu) sınırlayıcıları ayarlama


9

Linux'ta paste(GNU coreutils) 8.13 ile şu sorunum var :

Varsayılandan (TAB) başka bir sınırlayıcı ayarlamaya çalışmak, yalnızca tanımlanmış sınırlayıcının ilk karakterinin yazdırılması veya mükemmel şekilde göz ardı edilmesi ile sonuçlanır.

Soru : Biri (çoklu) sınırlayıcıları nasıl tanımlar paste ?

Basitçe, örneğin abc-123 sınırlayıcı olarak kullanmak güzel olurdu. "Çoklu" ile kastediyorum, örneğin bir yerine 2 SEKME.


Şimdiye kadar denediğim sınırlayıcıları kapsayan desenler

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

Hepsi aynı sonuçla: Yalnızca ilk karakter kabul edilir veya tamamen göz ardı edilir. Ben de kısa versiyonu -d"\"ve çoklu örnekleri denedim & ndahs; hiçbir şey değil.

Ayrıca:

  • --delimiters="\\" → Hata mesajı

Ne istediğim olmasa da mükemmel çalışan nedir:

  • --delimiters="\n" → satırsonu
  • --delimiters="\0" → arasında hiçbir şey yok
  • --delimiters="\t"TAB, varsayılan değerdir. Harika.

Yanıtlar:


17

Sahip olmak abcİnbetween file1 ve dosya2, yapabileceğiniz:

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

Veya:

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

İki sekme istiyorsanız:

paste file1 /dev/null file2

" metin işlemede iki sütun oluşturmak için kullanma/dev/null " çalışır (ayrıca: şimdiye kadar kaçırdığım bu ortak bilgi mi ve değilse: bu bilgiyi nereden
aldınız

1
Chirp.NotLuke @. /dev/nullokurken boş bir dosya gibi davranır, bu nedenle yapıştırma yaparsınız file1ve boş dosya ve boş dosya, ayırıcıları olan dosya2, sırayla a, bve olur c. -dÇalışmaların nasıl yapıldığına dair ayrıntılar pastekılavuz sayfasında.
Stéphane Chazelas

@ StéphaneChazelas da pr -mts'abc' file1 file2alternatif olarak ekleyebilirsiniz ?
Sundeep

4

Katılmak için sadece iki dosya verdiğiniz için, her bir giriş dosyasındaki satırların her birleşimi arasında sınırlayıcı dizenin her karakteri kullanılır.

Örneğin

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

2

BSD sistemlerinde (bildiğim kadarıyla Linux değil), lamyukarıdaki çözümden daha hızlı ve daha kısa olan (“laminat” ta olduğu gibi) yardımcı program vardır:

lam file1 -s delimiter file2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.