मेरे पास SQL प्रकार की फ़ाइल के टेक्स्ट पार्सिंग की एक निश्चित विशिष्ट आवश्यकता है, नीचे विवरण दिया गया है।
बड़ी क्वेरी:
select
col A,
col B,
.
.
from
(select * from db1.table1 where conditions) t1
left outer join
(select * from db2.table2 where conditions) t2
on table1.col1 = table2.col1
left outer join
(select * from db3.table3 where conditions) t3
on table2.col1 = table3.col3
और क्वेरी इस तरह चल सकती है। मैं नीचे दिए गए विशिष्ट प्रारूप में क्वेरी को पार्स और संशोधित करने का प्रयास कर रहा था:
select
col A,
col B,
.
.
from
PH1 t1
left outer join
PH2 t2
on table1.col1 = table2.col1
left outer join
PH3 t3
on table2.col1 = table3.col3
प्लेस होल्डर्स (पीएच), मैं एक और अलग फाइल रखना चाहता हूं; मैं उन्हें यहां SQL में कॉल करूंगा (और यह समस्या नहीं है)।
मैं बैश में पार्स करने की कोशिश कर रहा हूं, और वास्तव में यह सुनिश्चित नहीं करता कि जगह धारकों द्वारा आंतरिक चयन प्रश्नों को कैसे बदला जाए। क्वेरी का पहला भाग (पहले FROM
से ऊपर) को sed -n '/^SELECT/,/^FROM/p'
द्वारा अलग किया जा सकता है।
मैं किसी भी तरह से दूसरी आधी आवश्यकता के लिए आगे बढ़ने के बारे में तर्क तैयार करने में सक्षम नहीं हूं।
कोई विचार?
1 उत्तर
Awk का उपयोग करना। क्या यह ऐसा कुछ है:
$ awk -v RS="" '{ # read until first empty line or end
gsub(/\([^)]*\)/,"PH" ++n) # replace (..) with PHn
gsub(/\r?\n/,"& ") # newlines with newline and space
}1' file # output
आउटपुट:
select
col A,
col B,
.
.
from
PH1 t1
left outer join
PH1 t2
on table1.col1 = table2.col1
left outer join
PH1 t3
on table2.col1 = table3.col3
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।