aralarında bazı ayırıcı ekleyerek iki metin dosyalarını birleştirmek?


16

cat file1 file2iki metin dosyasını birleştirir. Ancak, bir veya iki satır gibi bir ayırıcı eklemek istersem ********************************, ilk dosyayı açmam ve satırı sonuna eklemem veya ikinci dosyayı açıp satırı en üste eklemem ve ardından çalıştırmam gerekir catkomut? Sadece bir komut çalıştırarak yapılabilir mi?

Yanıtlar:


17

İçinde bashve zshşunları yapabilirsiniz:

cat file1 <(echo '********************************') file2

veya yorumunda belirtildiği gibi mikeserv'in (herhangi bir kabukta):

echo '********************************' | cat file1 - file2

ve Bash'ta David Z'nin yorumladığı gibi:

cat file1 - file2 <<< '********************************'

Dosyalardaki yeni satırlar gösterilecektir. Eğer "ayırıcı" den sonra bir yeni satır istemiyorsanız (örneğin durumda file2bir satır ile başlar) kullanabilirsiniz echo -n '****', sonra çok bastırma yeni satır *.


7
aynı şeyi herhangi bir kabukta yapabilirsinizecho '**********************' |cat file - file2
mikeserv

Teşekkürler. kedi her zaman dosyalar arasına örtük olarak yeni bir satır ekliyor mu?
Herkes İçin Stack Exchange

1
@Tim - kesinlikle echoher zaman yapar.
mikeserv

1
@Tim - bu şekilde görünmüyor, ama kendiniz görün -printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
mikeserv

1
@Yeni çizgiyi yankıdan ...<(echo -n '****')bastırmak için kullanabilirsiniz . catyalnızca dosyada bir tane varsa (sonunda) birini gösterir.
Anthon

6

Buradancat olduğu gibi kullanmadan başka bir yaklaşım ,

awk 'FNR==1{print "******"}{print}' file1 file2 | sed '1d'

Son sed 1dboru, sınırlayıcıya sahip olacak ilk satırı çıkarmaktır.

Ancak, yorumlarında 1_CRsed tarafından önerilen komutu kullanırsak son kullanımdan çok kaçınılabilir .

awk 'FNR==1 && NR!=1 {print "******"}{print}' file1 file2

1
Eğer desen seddeğiştirerek önleyebilirsinizawkFNR == 1 && NR != 1
iruvar

10K'a ulaştığınız için tebrikler!
G-Man, 'Monica'yı Yeniden Başlat' diyor

@ G-Man, çok teşekkürler. Kutlamak için çok güzel :)
Ramesh

Bu, dosya modellerinin normal ifadesinin kolay uzantısına izin verir
Paul

3

Ayrıca birden fazla komuta da bölebilirsiniz:

cat file1; echo '------------'; cat file2

Ve bunu bir grup komutu veya alt kabuk kullanarak yönlendirebilir veya yönlendirebilirsiniz:

# GROUP COMMAND:
{ cat file1; echo '----------'; cat file2; } | other-command
#                                        ^ final semicolon is part of the syntax!

# SUBSHELL:
( cat file1; echo '----------'; cat file2 ) | other-command

Tabii ki, normal gibi noktalı virgül kullanmak yerine bunu birden çok satıra yazabilirsiniz. Ve başka bir dosyaya başka bir sınırlayıcı vb. İle genişletmek kolaydır.


2

İle paste:

$ echo '********************************' | paste -sd$'\n' file1 - 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.