विशेष पात्रों के साथ कई फाइलें बनाने के लिए बैच फ़ाइल


0

आवश्यक जानकारी: मेरे पास 304 लाइनों वाली एक फ़ाइल "DB_OUTPUT.TXT" है जिसे मुझे 304 फ़ाइलों (एक पंक्ति) में बदलने की आवश्यकता है। प्रत्येक पंक्ति में कई विशेष वर्ण होते हैं और हजारों वर्णों तक लंबे हो सकते हैं। इन कारणों के लिए, मुझे cmd।

मेरे पास एक फाइल "DB_OUTPUT_FILENAMES.TXT" है, जिसमें "db_output.txt" से प्रत्येक लाइन-टू-बी-फाइल के लिए एक अलग फ़ाइल नाम है। तो DB_OUTPUT.TXT की लाइन 1 को DB_OUTPUT_FILENAMES.TXT की लाइन 1 के बराबर नाम वाली एक नई फ़ाइल का शरीर होना चाहिए।

अतिरिक्त जानकारी: जैसा कि आप अनुमान लगा सकते हैं, DB_OUTPUT.TXT एक डेटाबेस से आउटपुट है; इसमें एसक्यूएल क्वेरी वाले अंतिम कॉलम के साथ एक निश्चित चौड़ाई पर 6 या 7 कॉलम के साथ 304 रिकॉर्ड हैं। इन पंक्तियों में से प्रत्येक (डीबी रिकॉर्ड) को नए डेटाबेस ऑब्जेक्ट बनाने के लिए स्क्रिप्ट के रूप में उपयोग किया जाएगा, यही वजह है कि विशेष वर्णों को संरक्षित करने की आवश्यकता है।

प्रश्न: क्या यह बैच-तरह के फैशन में ऐसा करने का एक तरीका है? मैं या तो एक विंडोज समाधान या एक लिनक्स के साथ खुश हूँ।


प्रश्न: क्या आप ऐसा करने के लिए पायथन, पीएचपी आदि जैसी भाषा का उपयोग करने के खिलाफ हैं? या क्या आपके पास यह आवश्यक है कि इसे पूरी तरह से बैश या सीएमडी बैच में किया जाना चाहिए? किसी भी तरह से, इस miiiight एक सवाल सबसे अच्छा StackOverflow द्वारा नियंत्रित किया जाना चाहिए।
22

किसी भाषा के विरुद्ध नहीं; सिर्फ शेल जैसे माहौल से ज्यादा परिचित था। दिशा के लिए धन्यवाद।
मौलीओक्यू

जवाबों:


0

splitकाम करना चाहिए (बस एक द्विआधारी फ़ाइल पर परीक्षण किया गया है जो आपके द्वारा वर्णित से भी बदतर है):

split -l 1 DB_OUTPUT.txt

यह "x" से शुरू होने वाली फाइलों का एक ढेर बनाता है। उनका नाम बदलने के लिए, शुरुआत करें

ls x* > oldnames

डबल जांचें कि लाइनों की संख्या सहमत है:

wc -l oldnames DB_OUTPUT_FILENAMES.TXT

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

( paste oldnames DB_OUTPUT_FILENAMES.TXT ) | while read i; do mv $i; done

(ध्यान दें कि यह मानता है कि आउटपुट फ़ाइलनाम में स्थान नहीं हैं।)


0

यहाँ एक शेल स्क्रिप्ट है:

#!/bin/sh

test "$#" -ne 3 && { echo arguments: datafile namefile dstdir ; exit 1 ; }

data="$1"
names="$2"
dstdir="$3"

test -e "$dstdir" || mkdir "$dstdir"

while read fn ; do
    read -r lin <&3
    echo -n "$lin" >"$dstdir/$fn"
done <"$names" 3<"$data"

आप विंडोज के तहत लिनक्स, मैक ओएस एक्स या साइगविन जैसे यूनिक्स जैसे वातावरण में स्क्रिप्ट चला सकते हैं। फ़ाइल में उदाहरण के लिए स्क्रिप्ट संग्रहीत करें splittofiles। करते हैं chmod a+x splittofiles

इसे चलाएं splittofiles DB_OUTPUT.TXT DB_OUTPUT_FILENAMES.TXT output:। परिणामी फाइलें निर्देशिका में बनाई जाएंगी output

अधिक त्रुटि-जाँच शर्तों को जोड़कर स्क्रिप्ट को पॉलिश किया जाना चाहिए। नोट में उल्लिखित पायथन में कार्यक्रम इस लिपि से अधिक तेज हो सकता है।


readडिफ़ॉल्ट \ रूप से विशेष रूप से व्यवहार करता है । स्विच -rको जोड़ना होगा ताकि readऐसा न हो।
पाबूक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.