मैं catयूनिक्स में कमांड की कार्यक्षमता को दोहराने की कोशिश कर रहा हूं ।
मैं उन समाधानों से बचना चाहूंगा, जहां मैं स्पष्ट रूप से दोनों फाइलों को चर में पढ़ता हूं, चर को एक साथ मिलाता हूं, और फिर संक्षिप्त चर को लिखता हूं।
मैं catयूनिक्स में कमांड की कार्यक्षमता को दोहराने की कोशिश कर रहा हूं ।
मैं उन समाधानों से बचना चाहूंगा, जहां मैं स्पष्ट रूप से दोनों फाइलों को चर में पढ़ता हूं, चर को एक साथ मिलाता हूं, और फिर संक्षिप्त चर को लिखता हूं।
जवाबों:
आप बस उपयोग कर सकते हैं cat example1.txt, example2.txt | sc examples.txt। आप निश्चित रूप से इस शैली के साथ दो से अधिक फ़ाइलों को संक्षिप्त कर सकते हैं, भी। इसके अलावा, यदि फ़ाइलें समान नाम की हैं, तो आप उपयोग कर सकते हैं:
cat example*.txt | sc allexamples.txt
के catलिए एक उपनाम है Get-Content, और के scलिए एक उपनाम है Set-Content।
नोट 1 : बाद के तरीके से सावधान रहें - यदि आप examples.txt(या पैटर्न से मिलते-जुलते हैं) आउटपुट की कोशिश करते हैं , तो पावरशेल एक अनंत लूप में आ जाएगी! (मैंने अभी यह परीक्षण किया है)।
नोट 2 : किसी फाइल में आउटपुट के साथ >कैरेक्टर एन्कोडिंग को संरक्षित नहीं करता है! यही कारण है कि उपयोग Set-Content( sc) की सिफारिश की है।
Set-Contentराष्ट्रीय कोड पेज का उपयोग करता है (जैसे अंग्रेजी के लिए विंडोज -1252)। यदि स्रोत फ़ाइलों में अन्य कोडिंग शामिल हैं (जैसे Windows-1251 या UTF8), तो आपको सही एन्कोडिंग सेट करना होगा sc file.txt -Encoding UTF8(रूसी के लिए 1251 जैसे नंबर v6.2 के बाद से समर्थित हैं)
Add-Contentयह है कि यदि आप दो बार कमांड चलाते हैं, तो एग्रीगेटेड फाइल दो बार लंबी होती है। एक अच्छा प्रतिस्थापन है Out-File। यहाँ
Get-Content my.bin -Raw | Set-Content my.bin -NoNewlineको my.binछोड़कर नहीं बदलेगा । -Rawकिसी भी CR / LF बाइट को सुरक्षित रखता है, जबकि -NoNewlinePowerShell को अपने CR / LF बाइट को जोड़ने से रोकता है।
उपयोग न करें >; यह चरित्र एन्कोडिंग को गड़बड़ करता है। उपयोग:
Get-Content files.* | Set-Content newfile.file
catके लिए एक उपनाम है Get-Content।
ÿþहै जो मिल रहा था । FF FE>
में cmd, आप यह कर सकते हैं:
copy one.txt+two.txt+three.txt four.txt
PowerShell में यह होगा:
cmd /c copy one.txt+two.txt+three.txt four.txt
जबकि PowerShell तरीका gc का उपयोग करना होगा , ऊपर विशेष रूप से बड़ी फ़ाइलों के लिए, बहुत तेज़ होगा। और इसका उपयोग गैर- ASCII फाइलों पर भी /Bस्विच का उपयोग करके किया जा सकता है ।
आप ऐड-कंटेंट cmdlet का उपयोग कर सकते हैं । शायद यह अन्य समाधानों की तुलना में थोड़ा तेज़ है, क्योंकि मैं पहली फ़ाइल की सामग्री को पुनर्प्राप्त नहीं करता हूं।
gc .\file2.txt| Add-Content -Path .\file1.txt
gcसंदर्भित करता है?
gcGet-Content
कमांड प्रॉम्प्ट में फ़ाइलों को संक्षिप्त करने के लिए यह होगा
type file1.txt file2.txt file3.txt > files.txt
PowerShell typeकमांड को कनवर्ट करता है Get-Content, जिसका अर्थ है कि typePowerShell में कमांड का उपयोग करते समय आपको एक त्रुटि मिलेगी क्योंकि Get-Contentकमांड को फ़ाइलों को अलग करने के लिए अल्पविराम की आवश्यकता होती है। PowerShell में एक ही कमांड होगा
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
मैंनें इस्तेमाल किया:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
यह ठीक है। मैंने जोड़ा कि ASCII एन्कोडिंग को हटाने के लिए nul वर्ण नोटपैड ++ स्पष्ट एन्कोडिंग के बिना दिखा रहा था।
आप कुछ ऐसा कर सकते हैं:
get-content input_file1 > output_file
get-content input_file2 >> output_file
जहां >"आउट-फाइल" के लिए एक उपनाम है, और >> "आउट-फाइल-टैपेंड" के लिए एक उपनाम है।
चूंकि अधिकांश अन्य उत्तरों में अक्सर प्रारूपण गलत हो जाता है (पाइपिंग के कारण), सबसे सुरक्षित काम इस प्रकार है:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
मुझे पता है कि आप $ SomeAdditionalFile की सामग्री को एक चर में पढ़ने से बचना चाहते थे, लेकिन उदाहरण के लिए आपके न्यूलाइन फॉर्मेटिंग को बचाने के लिए मुझे नहीं लगता कि इसके बिना करने का उचित तरीका है।
एक वर्कअराउंड आपके $ SomeAdditionalFile लाइन के माध्यम से लाइन और पाइपिंग द्वारा आपके $ YourMasterFile में लूप होगा। हालाँकि यह अत्यधिक संसाधन गहन है।