बड़ी फ़ाइल से पैटर्न की बहुत बड़ी संख्या


18

मेरे पास एक फाइल है जो एक दिन में लगभग 200,000 पंक्तियों में बढ़ रही है, और यह तीन लाइनों के ब्लॉक के साथ बनाई गई है जैसे:

1358726575123       # key
    Joseph Muller   # name
    carpenter       # job
9973834728345
    Andres Smith
    student
7836472098652
    Mariah Anthony
    dentist

अब, मेरे पास एक और फाइल है जिसमें से मैं लगभग 10,000 कुंजी पैटर्न निकालता हूं, जैसे कि 1358726575123। फिर मैं forइन पैटर्नों के साथ एक लूप चलाता हूं और उन्हें पहली फाइल के खिलाफ जांचना पड़ता है। यदि फ़ाइल में ऐसा पैटर्न नहीं है, तो मैं पैटर्न को आगे की प्रक्रिया के लिए तीसरी फ़ाइल में सहेजता हूं:

for number in $(grep -o '[0-9]\{12\}' file2); do  # finds about 10.000 keys
     if ! grep -q ^$number$ file1; then           # file1 is a huge file
         printf "$number\n" >>file3               # we'll process file3 later
     fi
done

उदाहरण कोड एक बड़ी फ़ाइल को 10,000 गुना करता है, और मैं पूरे दिन के दौरान इस लूप को एक मिनट में एक बार चलाता हूं ।

चूंकि विशाल फ़ाइल बढ़ती रहती है, इसलिए मैं यह सब तेजी से करने और कुछ सीपीयू को बचाने के लिए क्या कर सकता हूं? मुझे आश्चर्य है कि क्या फ़ाइल को किसी तरह इसकी कुंजी (यदि ऐसा है, तो कैसे?) या सादे पाठ के बजाय db का उपयोग करने में मदद मिलेगी ...


जवाबों:


11

यह उत्तर पोटोंगawk द्वारा पोस्ट किए गए उत्तर पर आधारित है .. यह मुख्य (फाइल और 10 हजार कुंजी ) में समान 6 मिलियन लाइनों (... अब एफएनआर का उपयोग करने के लिए अद्यतन किया गया ) के लिए विधि (मेरे सिस्टम पर) के रूप में दोगुना है। एनआर)
comm

यद्यपि awkआपकी वर्तमान प्रणाली की तुलना में तेज़ है, और आपको और आपके कंप्यूटर को कुछ साँस लेने की जगह देगा, इस बात से अवगत रहें कि जब डेटा प्रोसेसिंग आपके द्वारा वर्णित के रूप में तीव्र होती है, तो आपको एक समर्पित डेटाबेस पर स्विच करके सर्वश्रेष्ठ समग्र परिणाम मिलेंगे; जैसे। SQlite, MySQL ...


awk '{ if (/^[^0-9]/) { next }              # Skip lines which do not hold key values
       if (FNR==NR) { main[$0]=1 }          # Process keys from file "mainfile"
       else if (main[$0]==0) { keys[$0]=1 } # Process keys from file "keys"
     } END { for(key in keys) print key }' \
       "mainfile" "keys" >"keys.not-in-main"

# For 6 million lines in "mainfile" and 10 thousand keys in "keys"

# The awk  method
# time:
#   real    0m14.495s
#   user    0m14.457s
#   sys     0m0.044s

# The comm  method
# time:
#   real    0m27.976s
#   user    0m28.046s
#   sys     0m0.104s


यह तेज़ है, लेकिन मुझे बहुत कुछ समझ में नहीं आ रहा है: फ़ाइल नाम क्या दिखना चाहिए? मैंने कोशिश की file1 -> mainfileऔर file2 -> keysgawk और mawk के साथ, और यह गलत कुंजी को आउटपुट करता है।
टेरेसा ई जूनियर

file1 में चाबियाँ, नाम और नौकरियां हैं।
टेरेसा ई जूनियर

'मेनफाइल' बड़ी फाइल (कीज, नेम और जॉब के साथ) है। मैंने इसे केवल "मेनफाइल 'कहा है क्योंकि मैं मिलाता रहा कि कौन सी फाइल थी (फाइल 1 बनाम फाइल 2) ..' कीज 'में केवल 10 हजार, या फिर बहुत सारी, कीज शामिल हैं। आपके सीटटन के लिए कोई भी रीडायरेक्ट नहीं है । .. सिर्फ file1 EOF file2 का उपयोग करें। वे आपकी फ़ाइलों के नाम हैं .. "EOF" पहली फ़ाइल (मुख्य डेटा फ़ाइल) के अंत और तह दूसरी फ़ाइल की शुरुआत को इंगित करने के लिए स्क्रिप्ट द्वारा 1-लाइन फ़ाइल creadte है ( चाबियाँ)। awkआप फ़ाइलों की एक श्रृंखला में पढ़ने के लिए अनुमति देते हैं .. इस मामले में उस श्रृंखला में 3 फाइलें हैं। आउटपुटstdout
पीटर.ओ.

यह स्क्रिप्ट किसी भी कुंजी को प्रिंट करेगी जो इसमें मौजूद है mainfile, और यह keysफ़ाइल से किसी भी कुंजी को प्रिंट करेगी जो इसमें नहीं है mainfile... शायद यही हो रहा है ... (मैं इसमें थोड़ा और आगे देखूंगा ...
पीटर।

धन्यवाद, @ पीटर .ओ! चूंकि फाइलें गोपनीय हैं, इसलिए मैं $RANDOMअपलोड करने के लिए नमूना फाइल बनाने की कोशिश कर रहा हूं ।
टेरेसा ई जूनियर

16

बेशक, समस्या यह है कि आप 10,000 बार बड़ी फ़ाइल पर grep चलाते हैं। आपको दोनों फाइलों को केवल एक बार पढ़ना चाहिए। यदि आप स्क्रिप्टिंग भाषाओं के बाहर रहना चाहते हैं, तो आप इसे इस तरह से कर सकते हैं:

  1. फ़ाइल 1 से सभी नंबर निकालें और उन्हें सॉर्ट करें
  2. फ़ाइल 2 से सभी नंबर निकालें और उन्हें सॉर्ट करें
  3. भागो commक्रमबद्ध सूची पर क्या दूसरी सूची पर ही है पाने के लिए

कुछ इस तरह:

$ grep -o '^[0-9]\{12\}$' file1 | sort -u -o file1.sorted
$ grep -o  '[0-9]\{12\}'  file2 | sort -u -o file2.sorted
$ comm -13 file1.sorted file2.sorted > file3

देखते हैं man comm

यदि आप हर दिन बड़ी फ़ाइल को काट सकते हैं (एक लॉग फ़ाइल की तरह) तो आप सॉर्ट किए गए नंबरों का एक कैश रख सकते हैं और इसे हर बार पार्स करने की आवश्यकता नहीं होगी।


1
साफ! मेनफाइल में 200,000 रैंडम लाइन्स एंट्रीज़ के साथ 2 सेकंड (विशेष रूप से तेज़ ड्राइव पर) (यानी 600,000 लाइन्स) और 143,000 रैंडम कीज़ (कि बस मेरा टेस्ट डेटा कैसे खत्म हुआ) ... टेस्ट किया गया, और यह काम करता है (लेकिन आप जानते थे कि: ) ... मुझे आश्चर्य है कि {12}.. ओपी ने 12 का उपयोग किया है, लेकिन उदाहरण चाबियाँ 13 लंबे हैं ...
पीटर

2
बस थोड़ा सा ध्यान दें, आप इसे अस्थायी फ़ाइलों से निपटने के बिना कर सकते हैं <(grep...sort)जहां फ़ाइल नाम हैं।
केविन

धन्यवाद, लेकिन फाइलों को पकड़ना और छांटना मेरे पिछले लूप (+ 2min) की तुलना में अधिक लंबा लगता है।
टेरेसा ई जूनियर

@ टेरेसा ई जूनियर। आपकी मुख्य फ़ाइल कितनी बड़ी है? ... आपने उल्लेख किया है कि यह एक दिन में 200,000 लाइनों पर बढ़ता है, लेकिन यह कितना बड़ा नहीं है ... आपके द्वारा संसाधित किए जाने वाले डेटा की मात्रा को कम करने के लिए, आप केवल वर्तमान दिनों की 200,000 पंक्तियों को ध्यान में रखकर पढ़ सकते हैं अंतिम पंक्ति संख्या संसाधित (कल) और tail -n +$linenumकेवल नवीनतम डेटा के उत्पादन के लिए। इस तरह से आप प्रत्येक दिन केवल लगभग 200,000 लाइनों का प्रसंस्करण करेंगे .. मैंने अभी मुख्य फाइल में 6 मिलियन लाइनों और 10 हजार कुंजी के साथ परीक्षण किया है ... समय : वास्तविक 0m0.016s, उपयोगकर्ता 0m0.008s, sys 0m0.008s
पीटर

मैं वास्तव में काफी हैरान कर रहा हूँ / कि आप अपने मुख्य फ़ाइल grep कर सकते हैं के बारे में उत्सुक 10,000 बार और यह तेजी से इस विधि है जो केवल यह greps से लगता है एक बार (और बहुत छोटे के लिए एक बार file1 ) ... यहां तक कि अगर अपने तरह से अधिक समय लेता मेरी परीक्षण, मैं सिर्फ इस विचार के इर्द-गिर्द अपना सिर नहीं जमा सकता कि एक बड़ी फाइल को पढ़ना, जो कई बार एक ही तरह से नहीं
निकलता

8

हां, डेटाबेस का उपयोग जरूर करें। वे वास्तव में इस तरह के कार्यों के लिए बने हैं।


धन्यवाद! मुझे डेटाबेस का बहुत अनुभव नहीं है। आप किस डेटाबेस की सलाह देते हैं? मुझे MySQL और sqlite3 कमांड इंस्टॉल हो गया है।
टेरेसा ई जूनियर

1
इसके लिए वे दोनों ठीक हैं, साइक्लाइट सरल है क्योंकि यह मूल रूप से केवल एक फ़ाइल है और इसे एक्सेस करने के लिए एक SQL एपीआई है। MySQL के साथ आपको इसका उपयोग करने के लिए MySQL सर्वर सेट करने की आवश्यकता है। हालांकि, यह बहुत मुश्किल नहीं है, फिर भी शुरू करने के लिए साइक्लाइट सबसे अच्छा हो सकता है।
मिका फिशर

3

यह आपके लिए काम कर सकता है:

 awk '/^[0-9]/{a[$0]++}END{for(x in a)if(a[x]==1)print x}' file{1,2} >file3

संपादित करें:

दोनों फ़ाइलों में डुप्लिकेट और अज्ञात कुंजी के लिए अनुमति देने के लिए संशोधित स्क्रिप्ट, अभी भी पहली फ़ाइल से कुंजी का उत्पादन करती है जो दूसरे में मौजूद नहीं है:

 awk '/^[0-9]/{if(FNR==NR){a[$0]=1;next};if($0 in a){a[$0]=2}}END{for(x in a)if(a[x]==1)print x}' file{1,2} >file3

यह मुख्य फ़ाइल में एक से अधिक बार होने वाली नई कुंजियों को याद करेगा (और उस मामले के लिए, जो कुंजियों की फ़ाइल में एक से अधिक बार हुआ है) यह आवश्यक लगता है कि मुख्य फ़ाइल की सरणी गणना में वृद्धि 1 से अधिक नहीं है, या कुछ समतुल्य वर्कअराउंड (+1 क्योंकि यह निशान के बहुत करीब है)
पीटर।

1
मैं gawk और mawk के साथ कोशिश की, और यह गलत कुंजी आउटपुट ...
टेरेसा ई जूनियर

@ पीटर.ओआई ने माना कि मुख्य फ़ाइल में अद्वितीय कुंजियाँ थीं और वह फ़ाइल 2 मुख्य फ़ाइल का सबसेट थी।
पोटोंग

@potong दूसरा काम अच्छा और बहुत तेज़ है! धन्यवाद!
टेरेसा ई जूनियर

@ टेरेसा ई जूनियर क्या आपको यकीन है कि यह अभी तक सही तरीके से काम कर रहा है? .. आपके द्वारा प्रदान किए गए परीक्षण डेटा का उपयोग करते हुए , जो 5000 कुंजी का उत्पादन करना चाहिए , जब मैं इसे चलाता हूं, तो यह 136703 कुंजी का उत्पादन करता है , जैसा कि मुझे अंत में मिला जब तक कि मुझे आपकी आवश्यकताओं की समझ नहीं थी। ... @potong बेशक! एफएनआर == एनआर (मैंने इसे :) से पहले कभी इस्तेमाल नहीं किया है
पीटर

2

उस डेटा के साथ, आपको वास्तव में एक डेटाबेस में जाना चाहिए। इस बीच, एक बात जो आपको अच्छी करनी चाहिए वह यह है कि अच्छे प्रदर्शन के file1लिए हर कुंजी के लिए अलग से खोज नहीं करनी चाहिए । एक बार grepमें सभी गैर-बहिष्कृत कुंजी निकालने के लिए एकल चलाएं । चूँकि वह grepभी ऐसी लाइनें देता है जिसमें एक कुंजी नहीं होती है, उन्हें दूर फ़िल्टर करें

grep -o '[0-9]\{12\}' file2 |
grep -Fxv -f - file1 |
grep -vx '[0-9]\{12\}' >file3

( -Fxपूरी लाइनों को खोजने का मतलब है, शाब्दिक अर्थ। -f -मानक इनपुट से पैटर्न की एक सूची को पढ़ने के लिए।)


जब तक मैं गलत नहीं हूँ, यह कुंजी स्टोर करने की समस्या को संबोधित नहीं करता है जो कि बड़ी फ़ाइल में नहीं है, यह उन कुंजियों को संग्रहीत करेगा जो इसमें हैं।
केविन

@ केविन बिल्कुल, और इसने मुझे लूप का उपयोग करने के लिए मजबूर किया है।
टेरेसा ई जूनियर

@TeresaeJunior: जोड़ना -v( -Fxv) उसकी देखभाल कर सकता है।
अगली सूचना तक रोक दिया गया।

@DennisWilliamson कि बड़ी फ़ाइल की सभी पंक्तियों को ले लेगा, जो कुंजी फ़ाइल में किसी भी नाम से मेल नहीं खाती हैं, जैसे नाम, नौकरी, आदि
केविन

@ क्विन थैंक्स, मैं इस सवाल को गलत समझूंगा। मैंने गैर-कुंजी लाइनों के लिए एक फ़िल्टर जोड़ा है, हालांकि मेरी प्राथमिकता अब उपयोगcomm करने के लिए जाती है ।
गिल्स एसओ- बुराई को रोकें '

2

दूसरों ने जो कहा है, उसे पुष्ट करने के लिए मुझे अनुमति दें, "आप एक डेटाबेस पर जाएं!"

हैं MySQL सबसे प्लेटफार्मों के लिए स्वतंत्र रूप से उपलब्ध बाइनरी।

SQLite क्यों नहीं? यह मेमोरी-आधारित है, जब आप इसे शुरू करते हैं, तो एक फ्लैट-फ़ाइल को लोड करते हैं, फिर जब आप काम करते हैं तो इसे बंद कर देते हैं। इसका मतलब है कि यदि आपका कंप्यूटर क्रैश हो जाता है या SQLite प्रक्रिया चली जाती है, तो सभी डेटा।

आपकी समस्या SQL की सिर्फ एक दो पंक्तियों की तरह दिखती है, और मिलीसेकंड में चलेगी!

MySQL स्थापित करने के बाद (जो मैं अन्य विकल्पों पर सलाह देता हूं), मैं एंथोनी मोलिनारो द्वारा ओ'रिली की एसक्यूएल कुकबुक के लिए $ 40 का भुगतान किया था , जिसमें बहुत सारे समस्या पैटर्न हैं, जो सरल SELECT * FROM tableप्रश्नों के साथ शुरू होता है , और एग्रीगेट और कई जॉइन से गुजरता है।


हाँ, मैं कुछ दिनों में एसक्यूएल में अपना डेटा माइग्रेट करना शुरू करूँगा, धन्यवाद! जागृत स्क्रिप्ट मुझे बहुत मदद कर रही है जब तक कि मैं इसे पूरा नहीं कर लेता, हालांकि!
टेरेसा ई जूनियर

1

मुझे यकीन नहीं है कि यह सटीक आउटपुट है जिसे आप ढूंढ रहे हैं, लेकिन शायद सबसे आसान तरीका है:

grep -o '[0-9]\{12\}' file2 | sed 's/.*/^&$/' > /tmp/numpatterns.grep
grep -vf /tmp/numpatterns.grep file1 > file3
rm -f /tmp/numpatterns.grep

आप यह भी उपयोग कर सकते हैं:

sed -ne '/.*\([0-9]\{12\}.*/^\1$/p' file2 > /tmp/numpatterns.grep
grep -vf /tmp/numpatterns.grep file1 > file3
rm -f /tmp/numpatterns.grep

इनमें से प्रत्येक एक अस्थायी पैटर्न फ़ाइल बनाता है जिसका उपयोग बड़ी फ़ाइल ( file1) से संख्याओं को चमकाने के लिए किया जाता है ।


मेरा मानना ​​है कि यह बहुत बड़ी संख्या में हैं, जो नहीं हैं।
केविन

सही है, मैंने 'नहीं देखा!' ओपी में। बस grep -vfइसके बजाय उपयोग करने की आवश्यकता है grep -f
Arsege

2
कोई @arcege, grep -vf से मिलान नहीं की गई कुंजियों को प्रदर्शित नहीं करेगा, यह नामों और नौकरियों सहित सब कुछ प्रदर्शित करेगा।
टेरेसा ई जूनियर

1

मैं एक डेटाबेस प्राप्त करने से पूरी तरह सहमत हूं (MySQL का उपयोग करना काफी आसान है)। जब तक आप उस रनिंग को प्राप्त नहीं कर लेते, मुझे एंगस का commसमाधान पसंद है , लेकिन इतने सारे लोग इसके साथ प्रयास कर रहे हैं grepऔर यह गलत हो रहा है कि मुझे लगा कि मैं (या कम से कम एक) इसे करने का सही तरीका दिखाऊंगा grep

grep -o '[0-9]\{12\}' keyfile | grep -v -f <(grep -o '^[0-9]\{12\}' bigfile) 

पहले grepचाबी मिलती है। तीसरा grep(इन <(...)) बड़ी फ़ाइल में उपयोग की जाने वाली सभी कुंजियों को लेता है, और <(...)इसे -fदूसरे gpp में एक तर्क के रूप में फ़ाइल की तरह पास करता है । इसका कारण यह है कि दूसरा grepमिलान करने के लिए लाइनों की सूची के रूप में इसका उपयोग करता है। यह तब पाइप (पहले grep) से इसके इनपुट (चाबियों की सूची) से मिलान करने के लिए इसका उपयोग करता है , और कुंजी फ़ाइल से निकाली गई किसी भी कुंजी को प्रिंट करता है और न ही ( -v) बड़ी फाइल को।

बेशक आप इसे अस्थायी फ़ाइलों के साथ कर सकते हैं जिन्हें आपको हटाना होगा और हटाना याद रखना होगा:

grep -o '[0-9]\{12\}'  keyfile >allkeys
grep -o '^[0-9]\{12\}' bigfile >usedkeys
grep -v -f usedkeys allkeys

इसमें सभी लाइनें प्रिंट allkeysनहीं होती हैं usedkeys


दुर्भाग्य से यह धीमा है , और मुझे 40 सेकंड के बाद एक मेमोरी त्रुटि मिलती है:grep: Memory exhausted
पीटर।

@ पीटर। लेकिन यह सही है। वैसे भी, इसीलिए मैं commउस क्रम में एक डेटाबेस या सुझाव दूंगा।
केविन

हाँ जो काम करता है, लेकिन लूप की तुलना में बहुत धीमा है।
टेरेसा ई जूनियर

1

कीफाइल नहीं बदलता है? फिर आपको पुरानी प्रविष्टियों को बार-बार खोजने से बचना चाहिए।

साथ tail -fआप एक बढ़ती हुई फ़ाइल के उत्पादन प्राप्त कर सकते हैं।

tail -f growingfile | grep -f keyfile 

grep -f एक फाइल से पैटर्न को पढ़ता है, एक पैटर्न के रूप में एक लाइन।


यह अच्छा होगा, लेकिन कुंजी फ़ाइल हमेशा अलग होती है।
टेरेसा ई जूनियर

1

अपना उत्तर पोस्ट नहीं करने जा रहा था क्योंकि मुझे लगा था कि इस तरह के डेटा को शेल स्क्रिप्ट के साथ संसाधित नहीं किया जाना चाहिए, और डेटाबेस का उपयोग करने का सही उत्तर पहले ही दिया गया था। लेकिन चूंकि अब 7 अन्य दृष्टिकोण हैं ...

स्मृति में पहली फ़ाइल पढ़ता है, फिर संख्याओं और जाँचों के लिए दूसरी फ़ाइल को greps करता है यदि मान स्मृति में संग्रहीत हैं। यह कई grepएस से तेज होना चाहिए , यदि आपके पास पूरी फ़ाइल लोड करने के लिए पर्याप्त मेमोरी है, अर्थात।

declare -a record
while read key
do
    read name
    read job
    record[$key]="$name:$job"
done < file1

for number in $(grep -o '[0-9]\{12\}' file2)
do
    [[ -n ${mylist[$number]} ]] || echo $number >> file3
done

मुझे पर्याप्त याददाश्त मिली है, लेकिन मुझे यह बहुत धीमी लगी। हालांकि धन्यवाद!
टेरेसा ई जूनियर

1

मैं @ जैन-स्टेपमैन से सहमत हूं कि आपको इस तरह के कार्य के लिए डेटाबेस का उपयोग करना चाहिए। शेल स्क्रिप्ट के साथ एक समाधान को हैक करने के बहुत सारे तरीके हैं जैसे कि अन्य उत्तर दिखाते हैं, लेकिन ऐसा करने से आपको बहुत दुख होगा अगर आप किसी भी लम्बाई के लिए कोड का उपयोग करने और बनाए रखने के लिए जा रहे हैं, तो इससे अधिक सिर्फ एक दिन की फेंक-फेंक परियोजना।

मान लें कि आप एक लिनक्स बॉक्स पर हैं, तो आपको सबसे अधिक संभावना है कि डिफ़ॉल्ट रूप से पायथन स्थापित किया गया है जिसमें पायथन v2.5 के रूप में sqlite3 पुस्तकालय शामिल है । आप अपने पायथन संस्करण की जाँच कर सकते हैं:

% python -V
Python 2.7.2+

मैं sqlite3 पुस्तकालय का उपयोग करने की सलाह देता हूं क्योंकि यह एक सरल फ़ाइल-आधारित समाधान है जो सभी प्लेटफार्मों (आपके वेब ब्राउज़र के अंदर सहित!) के लिए मौजूद है और इसे स्थापित करने के लिए सर्वर की आवश्यकता नहीं है। अनिवार्य रूप से शून्य-विन्यास और शून्य-रखरखाव।

नीचे एक सरल अजगर स्क्रिप्ट है जो फ़ाइल प्रारूप को पार्स करेगा जो आपने एक उदाहरण के रूप में दिया था और फिर एक सरल "सभी का चयन करें" क्वेरी और आउटपुट सब कुछ इसे db में संग्रहीत करता है।

#!/usr/bin/env python

import sqlite3
import sys

dbname = '/tmp/simple.db'
filename = '/tmp/input.txt'
with sqlite3.connect(dbname) as conn:
    conn.execute('''create table if not exists people (key integer primary key, name text, job text)''')
    with open(filename) as f:
        for key in f:
            key = key.strip()
            name = f.next().strip()
            job = f.next().strip()
            try:
                conn.execute('''insert into people values (?,?,?)''', (key, name, job))
            except sqlite3.IntegrityError:
                sys.stderr.write('record already exists: %s, %s, %s\n' % (key, name, job))
    cur = conn.cursor()

    # get all people
    cur.execute('''select * from people''')
    for row in cur:
        print row

    # get just two specific people
    person_list = [1358726575123, 9973834728345]
    cur.execute('''select * from people where key in (?,?)''', person_list)
    for row in cur:
        print row

    # a more general way to get however many people are in the list
    person_list = [1358726575123, 9973834728345]
    template = ','.join(['?'] * len(person_list))
    cur.execute('''select * from people where key in (%s)''' % (template), person_list)
    for row in cur:
        print row

हां, इसका मतलब है कि आपको कुछ एसक्यूएल सीखने की आवश्यकता होगी , लेकिन लंबे समय में यह इसके लायक होगा। इसके अलावा, अपनी लॉग फ़ाइलों को पार्स करने के बजाय, शायद आप डेटा को सीधे अपने sqlite डेटाबेस में लिख सकते हैं।


अजगर स्क्रिप्ट के लिए धन्यवाद! मुझे लगता है कि /usr/bin/sqlite3शेल स्क्रिप्ट्स के लिए उसी तरह काम करता है ( package.debian.org/squeeze/sqlite3 ), हालांकि मैंने इसे कभी नहीं देखा।
टेरेसा ई जूनियर

हां, आप /usr/bin/sqlite3शेल स्क्रिप्ट का उपयोग कर सकते हैं , हालांकि मैं सरल थ्रो-दूर कार्यक्रमों को छोड़कर शेल स्क्रिप्ट से बचने की सलाह देता हूं और इसके बजाय एक ऐसी भाषा का उपयोग करता हूं, जिसमें बेहतर त्रुटि से निपटने और विकसित करने और विकसित करने में आसान है।
एकूलिच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.