के बीच कुछ विभाजक जोड़ने के साथ दो पाठ फ़ाइलों को मिलाएं?


16

cat file1 file2दो पाठ फ़ाइलों को संयोजित करेगा। लेकिन अगर मैं बीच में कुछ विभाजक जोड़ना चाहता हूं, जैसे एक या दो लाइन ********************************, क्या मुझे पहली फ़ाइल खोलनी है, और उसके अंत में लाइन जोड़ना है, या दूसरी फ़ाइल को खोलना है और उसके शीर्ष पर लाइन जोड़ना है, और फिर चलाना है catआदेश? क्या यह सिर्फ एक कमांड चलाने के साथ किया जा सकता है?

जवाबों:


17

में bashऔर zshआप कर सकते हैं:

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

या जैसा कि mikeserv ने अपनी टिप्पणी में संकेत दिया है (किसी भी शेल में):

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

और बैश में डेविड जेड ने टिप्पणी की:

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

फ़ाइलों में कोई भी नई सूची दिखाई जाएगी। यदि आप "विभाजक" के बाद एक नई रेखा नहीं चाहते हैं (उदाहरण file2के लिए एक नई पंक्ति के साथ शुरू होता है) तो आप उपयोग कर सकते हैं echo -n '****', इसलिए बाद की नई पंक्ति को दबाएं *


7
आप इसे किसी भी शेल में कर सकते हैं जैसेecho '**********************' |cat file - file2
mikeserv

धन्यवाद। क्या बिल्ली हमेशा फ़ाइलों के बीच एक नई रेखा जोड़ देती है, संक्षेप में?
ऑल

1
@ समय - निश्चित रूप से echoहमेशा करता है।
मोकेसर

1
@ टिम - यहाँ उस तरह से नहीं दिखता है, लेकिन खुद के लिए देखें -printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
mikeserv

1
@ आप ...<(echo -n '****')नई पंक्ति को इको से दबाने के लिए उपयोग कर सकते हैं । catकेवल एक दिखाता है जब फ़ाइल में एक होता है (अंत में)।
एन्थॉन

6

यहाँcat से मिले बिना उपयोग के एक और दृष्टिकोण ,

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

अंतिम sed 1dपाइप पहली पंक्ति को हटाने के लिए है जिसमें सीमांकक भी होगा।

हालाँकि अंतिम sedउपयोग से बहुत अच्छी तरह से बचा जा सकता है यदि हम कमांड का उपयोग 1_CR द्वारा सुझाई गई टिप्पणियों में करते हैं।

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

1
आप पैटर्न sedबदलकर इससे बच सकते हैंawkFNR == 1 && NR != 1
iruvar

10K तक पहुंचने पर बधाई!
जी-मैन का कहना है कि 'मोनिका'

@ जी-मैन, बहुत बहुत धन्यवाद। आपको बधाई देने के लिए यह बहुत अच्छा है :)
रमेश

यह फ़ाइल पैटर्न के रेगेक्स के लिए आसान विस्तार की अनुमति देता है
पॉल

3

आप इसे कई कमांड में विभाजित कर सकते हैं:

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

और आप पाइप या रीडायरेक्ट कर सकते हैं जो एक ग्रुप कमांड या सबस्क्रिप्शन का उपयोग कर रहे हैं:

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

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

बेशक, आप लिख सकते हैं कि अर्धविराम का उपयोग करने के बजाय सामान्य से अधिक लाइनों पर। और किसी अन्य फ़ाइल को किसी अन्य सीमांकक के साथ विस्तारित करना आसान है, आदि।


2

के साथ paste:

$ echo '********************************' | paste -sd$'\n' file1 - file2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.