विंडोज कमांड लाइन के साथ पाठ फ़ाइलों को सम्‍मिलित करें, अग्रणी रेखाओं को छोड़ते हुए


127

मुझे कुछ अपेक्षाकृत बड़ी पाठ फ़ाइलों को संक्षिप्त करने की आवश्यकता है, और कमांड लाइन के माध्यम से ऐसा करना पसंद करेंगे। दुर्भाग्य से मेरे पास केवल विंडोज है, और नए सॉफ़्टवेयर स्थापित नहीं कर सकते।

type file1.txt file2.txt > out.txt

मुझे लगभग वही प्राप्त करने की अनुमति देता है जो मैं चाहता हूं, लेकिन मैं नहीं चाहता कि file2.txt की पहली पंक्ति out.txt में शामिल हो।

मैंने देखा है कि एक आरंभिक पंक्ति को निर्दिष्ट करने moreका +nविकल्प है, लेकिन मैं इन परिणामों को प्राप्त करने के लिए संयोजन करने में कामयाब नहीं हुआ हूं। मुझे पता है कि यह विंडोज में संभव नहीं हो सकता है, और मैं हमेशा लाइन से छुटकारा पाने के लिए हाथ से बाहर संपादित कर सकता हूं। लेकिन क्या कमांड लाइन से इसे करने का एक सरल तरीका है?

जवाबों:


136
more +2 file2.txt > temp
type temp file1.txt > out.txt

या आप उपयोग कर सकते हैं copycopy /?अधिक के लिए देखें ।

copy /b temp+file1.txt  out.txt

4
बेशक! मैं हालांकि अस्थायी फ़ाइलों के उपयोग से बचना पसंद करूंगा। मैंने इसे एक कमांड में लाने के लिए कोष्ठक, पाइप और <का उपयोग करने की कोशिश की, लेकिन कहीं भी नहीं मिला। copyआदेश बहुत तेजी से है, लेकिन यह अंत में एक उप चरित्र डालता है। इससे बचने का कोई रास्ता है क्या?
जेम्स

18
मुझे लगता है कि यदि आप copy /b *.txt combined.txtव्यक्तिगत रूप से फ़ाइलों को सूचीबद्ध करने के लिए बिना कर सकते हैं सभी फ़ाइलों को जोड़ना चाहते हैं ।
फुलअंश

1
अधिक प्रतीत होता है टैब को रिक्त स्थान में परिवर्तित करें, दया!
एंटोनियो

मर्ज की गई फ़ाइलों से मूल फ़ाइलों को पुनर्प्राप्त करने के लिए कोई आदेश है?
स्वप्निल गान्धी

3
@ ghostdog74: मुझे लगता है कि यह type file1.txt temp > out.txtवास्तव में दूसरी फ़ाइल को जोड़ना है, पहले एक हेडर के बिना
Marius

61

मैं इसका उपयोग करता हूं, और यह मेरे लिए अच्छा काम करता है:

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

बेशक, हर दौड़ से पहले, आपको करना होगा DELETE C:\Folder\ConcatenatedFile.csv

एकमात्र मुद्दा यह है कि यदि सभी फाइलों में हेडर हैं, तो इसे सभी फाइलों में दोहराया जाएगा।


2
जब मैं संक्षिप्त फ़ाइल के लिए एक फ़ाइल नाम दर्ज करता हूं, जिसका अर्थ है कि यह फ़ाइलों के अंत में loaction (वर्णमाला क्रम) में सूचीबद्ध है, तो विंडोज़ दो बार संक्षिप्त रूप में लगती हैं! मैं 1filename.csv के फ़ाइल नाम का उपयोग करके समस्या को समाप्त नहीं कर पाया। मुझे लगता है कि एक अलग फ़ोल्डर में काम करने के लिए भी काम करना चाहिए ...
सेबकी

1
यदि आप> के बजाय> का उपयोग करते हैं, तो आपको फ़ाइल को पहले से हटाने की आवश्यकता नहीं है। > आउटपुट को रीडायरेक्ट करता है और हर बार फाइल को नया बनाता है। >> आउटपुट को पुनर्निर्देशित करता है और जोड़ता है।
एडी डेयो

1
यह फ़ाइल 2 में पहली पंक्ति को कैसे छोड़ता है, जिसके बारे में ओपी ने पूछा था?
डेन डस्केलस्कु

1
यह file2 में पहली पंक्ति को छोड़ता नहीं है। मुझे सवाल का वह हिस्सा याद आ गया।
राज मोर

1
मर्ज की गई फ़ाइलों से मूल फ़ाइलों को पुनर्प्राप्त करने के लिए कोई आदेश है?
स्वप्निल गान्धी

21

उपयोग करने की सिफारिश पर टिप्पणी करने के लिए मेरे पास पर्याप्त प्रतिष्ठा बिंदु नहीं हैं *.csv >> ConcatenatedFile.csv, लेकिन मैं एक चेतावनी जोड़ सकता हूं:

यदि आप ConcatenatedFile.csvउसी निर्देशिका में फ़ाइल बनाते हैं जिसका उपयोग आप संघनन के लिए कर रहे हैं तो इसे स्वयं जोड़ा जाएगा।


2
यह फ़ाइल 2 में पहली पंक्ति को कैसे छोड़ता है, जिसके बारे में ओपी ने पूछा था?
डेन डस्केलस्कु

6

लाइन द्वारा किसी फ़ाइल लाइन को प्रतिध्वनित करने के लिए FOR कमांड का उपयोग करें, और कई शुरुआती लाइनों को याद करने के लिए 'स्किप' विकल्प के साथ ...

FOR /F "skip=1" %i in (file2.txt) do @echo %i

आप एक बैच फ़ाइल के उत्पादन को पुनर्निर्देशित कर सकते हैं, जैसे कुछ ...

FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i

जब एक बैच फ़ाइल के भीतर एक चर का उपयोग किया जाता है, तो डबल% पर ध्यान दें।



3

मैं इसे एक टिप्पणी में डाल सकता हूँ ghostdog74, सिवाय मेरे प्रतिनिधि बहुत कम है, इसलिए यहाँ जाता है।

more +2 file2.txt > temp
यह कोड वास्तव में फ़ाइल की पंक्तियों 1 और 2 को अनदेखा करेगा। ओपी पहली फ़ाइल से सभी पंक्तियों को रखना चाहता है (हेडर पंक्ति को बनाए रखने के लिए), और फिर पहली पंक्ति को छोड़ दें (संभवतः उसी हेडर पंक्ति को दूसरी फ़ाइल पर), इसलिए केवल हेडर पंक्ति को बाहर करने के लिए ओपी का उपयोग करना चाहिए more +1

type temp file1.txt > out.txt

यह स्पष्ट नहीं है कि इस कोड से क्या आदेश निकलता है। के रूप में tempजोड़ा जाता है file1.txt(वांछित के रूप में), या में file1.txtजोड़ा जाता है temp(हेडर पंक्ति के रूप में अवांछित परिणामी फ़ाइल के बीच में दफन हो जाएगा)।

इसके अलावा, ये ऑपरेशन बड़ी फ़ाइलों (जैसे 300MB) के साथ वास्तव में लंबा समय लेते हैं


2

मुझे पता है कि आपने कहा था कि आप कोई भी सॉफ़्टवेयर स्थापित नहीं कर सकते, लेकिन मुझे यकीन नहीं है कि प्रतिबंध कितना कड़ा है। वैसे भी, मैं एक ही मुद्दा था (संभवतः एक ही हेडर के साथ दो फ़ाइलों को संक्षिप्त करने की कोशिश कर रहा था) और मुझे लगा कि मैं इस पृष्ठ पर आने वाले अन्य लोगों के लिए एक वैकल्पिक उत्तर प्रदान करूंगा, क्योंकि यह मेरे लिए बहुत अच्छा काम करता है।

खिड़कियों में पूरी तरह से आदेशों की एक पूरी कोशिश करने और गंभीर रूप से निराश होने के बाद, और सभी प्रकार के ग्राफ़िकल संपादकों की भी कोशिश कर रहा है जो बड़ी फ़ाइलों को खोलने में सक्षम होने का वादा करते हैं, लेकिन फिर, मैं अंत में अपनी लिनक्स जड़ों पर वापस आ गया और अपना Cygwin खोला प्रेरित करना। दो आदेश:

cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv

के लिए file1.csv800MB और file2.csv400MB, उन दो आदेशों मेरी मशीन पर 5 सेकंड के नीचे ले लिया। एक Cygwin प्रॉम्प्ट में, कोई कम नहीं। मैंने सोचा था कि लिनक्स कमांड साइगविन में धीमी होनी चाहिए थी, लेकिन उस दृष्टिकोण ने बहुत कम प्रयास किया और किसी भी विंडोज़ दृष्टिकोण से आसान था जो मुझे मिल सकता था।


1

शक्तियों में:

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt

0

आप भी बस यह कोशिश कर सकते हैं

type file2.txt >> file1.txt

यह file1.txt के अंत में file2.txt की सामग्री को जोड़ देगा

यदि आपको मूल file1.txt की आवश्यकता है, तो पहले से बैकअप लें। या आप ऐसा कर सकते हैं

type file1.txt > out.txt
type file2.txt >> out.txt

यदि आप पहली फ़ाइल के अंत में एक लाइन ब्रेक करना चाहते हैं, तो आप आवेदन करने से पहले निम्नलिखित कमांड की कोशिश कर सकते हैं।

type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt

0

यह copyबताने में मदद करता है कि वाइल्डकार्ड का उपयोग कई फाइलों को एक में मिलाने के लिए किया जा सकता है।

उदाहरण के लिए, वर्तमान फ़ोल्डर में सभी .txt फ़ाइलों को कॉपी करने के लिए जो "abc" से शुरू होकर xyz.txt नाम की एकल फ़ाइल में हैं:

copy abc*.txt xyz.txt


-1

यह लेता है Test.txtहेडर के साथ और संलग्न कर देता है Test1.txtऔर Test2.txtऔर के लिए परिणाम लिखते हैं Testresult.txtक्रमशः दूसरे और तीसरे फाइलों से हेडर अलग करना के बाद फ़ाइल:

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.