व्हिटेलिस्ट पर आधारित एक बड़े टेक्स्ट फ़ाइल में फ़िल्टर प्रविष्टियाँ


0

अच्छा दिन। मैं वास्तव में इस पर आपकी मदद का उपयोग कर सकता हूं। मेरे पास निम्नलिखित प्रारूप में एक आँकड़े पाठ फ़ाइल है।

 ID=1000000 
 Name=Name1
 Field1=Value1 
 ...(Fields 2 to 25)
 Field26=Value26 

 ID=1000001
 Name=Name2
 Field1=Value1 
 ...(Fields 2 to 25) 
 Field26=Value26

 ID=1000002
 Name=Name2
 Field1=Value1 
 ...(Fields 2 to 25) 
 Field26=Value26 

 ...goes up to 15000

मेरे पास एक सक्रिय लोग हैं जो टेक्स्ट फाइल लाइन ब्रेक द्वारा अलग किए गए हैं।

 Name2
 Name5
 Name11
 Name12 
 ...goes up to 1400 Random Names

यदि मुझे सक्रिय लोगों की टेक्स्ट फ़ाइल में नाम नहीं मिला है, तो मुझे आँकड़े पाठ फ़ाइल (आईडी, नाम, फ़ील्ड 1 से 26) से रिकॉर्ड हटाने में सक्षम होने की आवश्यकता है। उपरोक्त उदाहरण में, Name1 (ID, Name, Fields1 से 26) के लिए संबद्ध रिकॉर्ड को हटा दिया जाना चाहिए क्योंकि यह सक्रिय लोगों की टेक्स्ट फ़ाइल में नहीं है।

मैंने नोटपैड ++ के माध्यम से डेटा फ़ाइल को पुन: स्वरूपित करने की कोशिश की है। टेक्स्टफ़एक्स-> क्विक-> फाइंड को बदलें / इसे बदलने के लिए इसे अल्पविराम से अलग की गई फ़ाइल के साथ प्रत्येक रिकॉर्ड को लाइन ब्रेक द्वारा अलग करें। मैंने इसे फिर से व्यवस्थित किया था

 ID       Name    Field1  ...Fields2 to Fields 25... Field26
 1000000  Name1   Value1  ...Value2 to Value 25...   Value26
 1000001  Name2   Value1  ...Value2 to Value 25...   Value26
 1000002  Name3   Value1  ...Value2 to Value 25...   Value26

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

मैं अंत में एक घंटे के लिए यह पता लगाने की पूरी कोशिश कर रहा हूं। क्या कोई ऐसा उपाय है जिसके लिए मुझे 1400 बार दो फाइलों के बीच खोजने, कॉपी, पेस्ट और स्विच का उपयोग करने की आवश्यकता नहीं होगी? मैं प्रक्रिया को सरल बनाने के लिए विभिन्न तरीकों / कार्यक्रमों का उपयोग करने के लिए खुला हूं। दुर्भाग्य से, मुझे इस प्रारूप में आँकड़े फ़ाइल को रखना होगा।

मैं इस पर एक दीवार मारा है। कृपया मदद कीजिए। धन्यवाद।


क्या आप फ़ाइलों को 2 DB-तालिकाओं में रख सकते हैं, अधिमानतः एक DB जो EXCEPT के साथ चयन कर सकता है? यदि आप इस कार्य को अधिक बार करना चाहते हैं, तो शायद आप डीबी में आँकड़े फ़ाइल को स्थायी रूप से रख सकते हैं।
— ott--

जवाबों:


1

किसी भी बीएसडी या लिनक्स सिस्टम पर बहुत अधिक (मैंने इसे ओएस एक्स पर लिखा था) आप निम्नलिखित बैश स्क्रिप्ट का उपयोग कर सकते हैं filter.sh:

#!/bin/bash
if [ ! -f "$1" ] ; then
    echo "First argument must be active users list file"
    exit 1
fi
while read line
do
    if [ "$( grep -E "^$( echo $line | cut -d' ' -f2 )$" "$1" )" ]  ; then
        echo $line
    fi
done

अपनी मूल सक्रिय उपयोगकर्ता सूची को active.txtऔर संशोधित आँकड़ों की फ़ाइल के रूप में संग्रहित stats.txtकरें और इसका filter.shउपयोग करके निष्पादन योग्य बनाएं chmod +x filter.sh:

$ < stats.txt ./filter.sh active.txt | tee result.txt
1000001 Name2 Value1 ...Value2 to Value 25... Value26

यह सक्रिय आँकड़े प्रविष्टियों को मानक आउटपुट में प्रिंट करेगा और उन्हें लिखेगा result.txt।


उपयोगकर्ता को उम्मीद है कि उसके आसपास कहीं न कहीं लिनक्स सिस्टम है। उसने वांछित समाधान के लिए OS निर्दिष्ट नहीं किया।
— डैनियल बेक

जवाब के लिए धन्यवाद। मेरे पास विंडोज़ 7 अल्टीमेट एक्स 64 है। मैंने स्क्रिप्ट चलाने के लिए सागविन का इस्तेमाल किया। $ <सांख्यिकी। txt ./filter.sh सक्रिय। txt | tee result.txt ./filter.sh: पंक्ति 11: अप्रत्याशित टोकन के पास सिंटैक्स त्रुटि done' ./filter.sh: line 11: 'मुझे नहीं पता है कि अगर यह चल रहा है तो साइबरविन जाने का रास्ता है। यह भी मूल स्वरूपण रखना होगा? ID = idhere Name = namehere Field1 = valuehere .... Field26 = मूल्य दुर्भाग्य से, मुझे फ़ील्ड लेबल और समान संकेत रखने होंगे। मुझे आपके उत्तर की प्रतीक्षा रहेगी।
— क्रिस्पी के

@KrispyK कोई विचार नहीं है कि वहां कैसे करना है, इसलिए मैं उस प्रणाली पर एक समाधान की प्रतीक्षा कर रहा हूं। सौभाग्य!
— डैनियल बेक

मैंने अपनी टिप्पणी संपादित करते समय गलती से दबाया। क्या आप मेरे द्वारा किए गए पहले उत्तर पर टिप्पणी कर सकते हैं? धन्यवाद।
— क्रिस्पी के

@ क्रिस्पीके निम्नलिखित प्रयास करें ./filter.sh active.txt < stats.txt | tee result.txt:। वैकल्पिक रूप से, मेरी पोस्ट के नीचे संपादित लिंक के बगल में स्थित लिंक पर क्लिक करें और मेरे द्वारा सुझाए गए पहले संस्करण को देखें। स्क्रिप्ट में ही फ़ाइल नामों को हार्डकोड किया गया था।
— डैनियल बेक

0

संपादित करें: मैंने प्रश्न में सीएसवी के बारे में गलत व्याख्या की है। मैं केवल आउटपुट भाग पर चर्चा करने की कोशिश कर रहा था।


एक्सेल डेटाबेस / रिकॉर्डेट प्रतिमान नहीं है। एक्सेल के बजाय, आप एक्सेस का उपयोग कर सकते हैं, या बैरिंग कर सकते हैं कि शायद OpenOffice ( http://www.openoffice.org/product/base.html ) से बेस जैसा कुछ । तालिकाओं के रूप में फ़ाइलें आयात करें, तालिकाओं को लिंक करें, [जादू] करें, नई फ़ाइलों को निर्यात करें।

एक्सेस में, फ़ाइल को आउटपुट करने का एक पागल तरीका एक क्वेरी बनाना है जो आपके द्वारा वांछित स्ट्रिंग बनाता है:

Select
"ID=" & [id] & chr(13) & chr(10) & 
"Name=" & [Name1] & chr(13) & chr(10) & 
( ... )
"Field26=" & [Value26] & chr(13) & chr(10) & 
FROM fooTable

और फिर इसे सेव करें, फिर इसे टेक्स्ट फाइल में एक्सपोर्ट करें। यह प्रति रिकॉर्ड एक फ़ील्ड के साथ एक क्वेरी बनाएगा। 13 + 10 विंडो कैरिज रिटर्न + लाइन फीड कॉम्बो है।

सुरुचिपूर्ण नहीं।


सक्रिय उपयोगकर्ता फ़ाइल के आधार पर आप कहां फ़िल्टर करते हैं? ऐसा नहीं लगता कि आपने प्रश्न का उत्तर दिया है।
— डैनियल बेक

मैं आउटपुट के बारे में 2 का जवाब दे रहा था। एक बार जब यह एक डेटाबेस प्रारूप होता है, तो एक JOIN क्वेरी कर सकता है; एक ध्वज फ़ील्ड बनाएं जो 1 पर सेट है यदि उनका नाम सक्रिय नामों की सूची ( update table1 set flagField = 1 where fooName in (select name from table2)) से मेल खाता है ; आदि नोट करें कि उनकी (अद्वितीय) आईडी के बजाय उस सक्रिय नाम सूची में नाम संग्रहीत करना एक है uh oh: जॉन स्मिथस में से कौन सही है?
— हॉर्सियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.