दिलचस्प पोस्ट
एंड्रॉइड को मेरी प्रक्रिया को मारने का अनुकरण कैसे करें इनपुट के अनुसार गतिशील दो आयाम सरणी एंड्रॉइड पर किसी अन्य एप्लिकेशन से एप्लिकेशन लॉन्च करें रीसाइक्लर आइटम का विस्तार / संक्षिप्त करें देखें स्थिरांक के लिए सी # नामकरण सम्मेलन? जावास्क्रिप्ट का उपयोग कर F5 और ब्राउज़र ताज़ा करें अक्षम करें क्रोम डेवलपर विंडो में अनुरोध के लिए "लंबित" क्या मतलब है? पोस्ट करें और php में एक ही समय पर जाएं विंक कमांड लाइन में yanked पाठ कैसे पेस्ट करें? मैं अपने जेफ्रेम आकार को कैसे चिकनी कर सकता हूँ Std :: नक्शा में कुंजी के रूप में char * का उपयोग करना आईओएस – अलग आकार के दो चित्रों को मिलाकर प्राथमिकता प्रश्न जोड़ने पर सॉर्ट नहीं करते यह कैसे करें Laravel में, subquery जहां में पायथन: HTTP स्ट्रीमिंग के साथ एक बड़ी फ़ाइल पोस्ट करें

क्या हम अजाल में शेल चर का उपयोग कर सकते हैं?

क्या हम AWK में शेल चर का उपयोग $1 बजाय $VAR $2 ? उदाहरण के लिए:

 UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW) NUSR=`echo ${UL[*]}|awk -F, '{print NF}'` echo $NUSR echo ${UL[*]}|awk -F, '{print $NUSR}' 

दरअसल, एक ऑरेकल डीबीए होने पर हम बहुत आयात के अनुरोध प्राप्त करते हैं मैं स्क्रिप्ट का उपयोग करके इसे स्वचालित करने की कोशिश कर रहा हूं I स्क्रिप्ट डंप में उपयोगकर्ताओं को पता चलेगा और उपयोगकर्ताओं को डंप के लिए लोड करने की आवश्यकता होगी।

मान लीजिए कि डंप के दो उपयोगकर्ता AKHIL , SWATHI (डंप में उपयोगकर्ता हो सकते हैं और मैं अधिक संख्या में उपयोगकर्ताओं को आयात करना चाहता हूं)। मैं नए उपयोगकर्ताओं को AKHIL_NEW और SWATHI_NEW डंप आयात करना चाहता SWATHI_NEW । तो कुछ पढ़े जाने वाले इनपुट को लगता है जैसे कि AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW

सबसे पहले, मुझे उपयोगकर्ताओं की संख्या का पता लगाना होगा, फिर मुझे हमारे द्वारा दिए गए इनपुट से नए उपयोगकर्ता अर्थात् AKHIL_NEW,SWATHI_NEW प्राप्त करना होगा। ताकि मैं डेटाबेस से कनेक्ट कर सकूं और नए उपयोगकर्ता बना सकूं और फिर आयात कर सकूँ। मैं पूरे कोड की प्रतिलिपि नहीं कर रहा हूं: मैंने उस कोड को कॉपी किया है जहां से वह इनपुट उपयोगकर्ताओं को स्वीकार करता है।

 UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW) ## it can be many users like USER1:USER1_NEW,USER2_USER2_NEW,USER3:USER_NEW.. NUSR=`echo ${UL[*]}|awk -F, '{print NF}'` #finding number of fields or users y=1 while [ $y -le $NUSR ] ; do USER=`echo ${UL[*]}|awk -F, -v NUSR=$y '{print $NUSR}' |awk -F: '{print $2}'` #getting Users to created AKHIL_NEW and SWATHI_NEW and passing to SQLPLUS if [[ $USER = SCPO* ]]; then TBS=SCPODATA else if [[ $USER = WWF* ]]; then TBS=WWFDATA else if [[ $USER = STSC* ]]; then TBS=SCPODATA else if [[ $USER = CSM* ]]; then TBS=CSMDATA else if [[ $USER = TMM* ]]; then TBS=TMDATA else if [[ $USER = IGP* ]]; then TBS=IGPDATA fi fi fi fi fi fi sqlplus -s '/ as sysdba' <<EOF # CREATING the USERS in the database CREATE USER $USER IDENTIFIED BY $USER DEFAULT TABLESPACE $TBS TEMPORARY TABLESPACE TEMP QUOTA 0K on SYSTEM QUOTA UNLIMITED ON $TBS; GRANT CONNECT, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, RESOURCE, SELECT_CATALOG_ROLE to $USER; EOF y=`expr $y + 1` done impdp sysem/manager DIRECTORY=DATA_PUMP DUMPFILE=imp.dp logfile=impdp.log SCHEMAS=AKHIL,SWATHI REMPA_SCHEMA=${UL[*]} 

पिछले अन्तर्वेशन कमांड में मुझे मूल उपयोगकर्ताओं को डंपों यानी अकीह, स्वाति को वेरिएबल्स का उपयोग करने की आवश्यकता है।

वेब के समाधान से एकत्रित समाधान "क्या हम अजाल में शेल चर का उपयोग कर सकते हैं?"

आपका कोड समझ में नहीं आता है, लेकिन सवाल आसानी से उत्तर दिया गया है: हाँ, आप असेंबल के अंदर शेल चर का उपयोग कर सकते हैं। यह करने के कई तरीके हैं, लेकिन मेरा पसंदीदा -v फ्लैग के साथ एक चर परिभाषित करना है:

 $ echo | awk -v my_var=4 '{print "My var is " my_var}' My var is 4 

बस -v फ्लैग के पैरामीटर के रूप में पर्यावरण चर को पास करें उदाहरण के लिए, यदि आपके पास यह चर है:

 $ VAR=3 $ echo $VAR 3 

इसे इस तरह प्रयोग करें:

 $ echo | awk -v env_var="$VAR" '{print "The value of VAR is " env_var}' The value of VAR is 3 

बेशक, आप एक ही नाम दे सकते हैं, लेकिन $ आवश्यक नहीं होगा:

 $ echo | awk -v VAR="$VAR" '{print "The value of VAR is " VAR}' The value of VAR is 3 

$ में awk के बारे में एक नोट : बाश, पर्ल, पीएचपी आदि के विपरीत यह वेरिएबल के नाम का हिस्सा नहीं है बल्कि एक ऑपरेटर है ।

Awk और गाव ENVIRON एसोसिएटिव सरणी प्रदान करते हैं जो सभी निर्यात पर्यावरण चर रखता है। इसलिए अपने अजीब स्क्रिप्ट में आप VarName का मान प्राप्त करने के लिए ENVIRON ["VarName"] का उपयोग कर सकते हैं, बशर्ते कि अनावल चलने से पहले VarName निर्यात किया गया है।

नोट ENVIRON एक पूर्वनिर्धारित awk चर है जो शेल पर्यावरण चर नहीं है।

चूंकि मेरे पास अन्य उत्तरों पर टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है इसलिए मुझे उन्हें यहां शामिल करना होगा!

$ ENVIRON दिखाते हुए पहले जवाब गलत है – वाक्यविन्यास शेल द्वारा विस्तारित किया जाएगा, और संभवतः इसका परिणाम कुछ भी नहीं हो सकता है।

सी के बारे में पिछली टिप्पणी पर्यावरण चर तक पहुंचने में सक्षम नहीं है गलत है। ऊपर क्या कहा गया है इसके विपरीत, सी (और सी ++) getenv ("VarName") फ़ंक्शन का उपयोग करके पर्यावरण चर का उपयोग कर सकते हैं। कई अन्य भाषाओं समान पहुंच प्रदान करते हैं (उदाहरण के लिए, जावा: System.getenv (), पायथन: ओस्सेंवर, हास्केल सिस्टम। पर्यावरण, …)। ध्यान दें कि सभी मामलों में पर्यावरण चर तक पहुंच केवल पढ़ने के लिए है, आप किसी प्रोग्राम में एक वातावरण चर को बदल नहीं सकते हैं और उस मूल्य को कॉलिंग स्क्रिप्ट पर वापस प्राप्त कर सकते हैं।

awk को चर को पास करने के दो तरीके हैं: एक तरह से कमांड लाइन तर्क में वेरिएबल परिभाषित कर रहा है:

 $ echo ${UL[*]}|awk -F, -v NUSR=$NUSR '{print $NUSR}' SWATHI:SWATHI_NEW 

एक और तरीका है शेल वैरिएबल को export से एक पर्यावरण चर का प्रयोग करने और ENVIRON सरणी से पर्यावरण चर को पढ़ना।

 $ export NUSR $ echo ${UL[*]}|awk -F, '{print $ENVIRON["NUSR"]}' SWATHI:SWATHI_NEW 

2016 का अद्यतन करें: ओपी को अल्पविराम से पृथक किया गया डेटा है और इसके सूचकांक को देखते हुए एक आइटम निकालना चाहता है। सूचकांक शेल वैरिएबल NUSR NUSR का मूल्य awk को पारित किया गया है, और NUSR का डॉलर ऑपरेटर आइटम को निकालता है

ध्यान दें कि यूएल को एक से अधिक तत्वों की एक सरणी के रूप में घोषित करने और bash में निष्कर्षण करना आसान होगा और समीकरण से पूरी तरह यह हालांकि 0-आधारित अनुक्रमण का उपयोग करता है।

 UL=(AKHIL:AKHIL_NEW SWATHI:SWATHI_NEW) NUSR=1 echo ${UL[NUSR]} # prints SWATHI:SWATHI_NEW 

निश्चित नहीं है कि मैं आपका प्रश्न समझता हूं।

लेकिन कह सकते हैं कि हमें एक variable number=3 मिला है और हम इसे $3 का आइटेएटेड उपयोग करना चाहते हैं, हम इसे नीचे दिए कोड के साथ कर सकते हैं।

 results="100 Mbits/sec 110 Mbits/sec 90 Mbits/sec" number=3 speed=$(echo $results | awk '{print '"\$${number}"'}') 

तो गति चर को मूल्य 110 मिलेगा।

उम्मीद है की यह मदद करेगा।

एक और तरीका है, लेकिन यह बहुत बड़ा भ्रम पैदा कर सकता है:

 $ VarName="howdy" ; echo | awk '{print "Just saying '$VarName'"}' Just saying howdy $ 

तो आप अस्थायी रूप से एकल उद्धरण पर्यावरण (जो आम तौर पर '$' की व्याख्या करने से खोल को रोकते हैं) को चर की व्याख्या करने के लिए और फिर उसमें वापस जा रहे हैं। यह अपेक्षाकृत संक्षिप्त होने का गुण है

नहीं। आप शेल वैरिएबल के मूल्य को एक ए्वकी स्क्रिप्ट में पास कर सकते हैं जैसे कि आप शेल वैरिएबल के सी प्रोग्राम को पास कर सकते हैं, लेकिन आप शेल वैरिएबल को एक एवीपी स्क्रिप्ट में एक्सेस नहीं कर सकते हैं, जितना कि आप शेल वैरिएबल तक पहुँच सकते हैं। सी प्रोग्राम में सी की तरह, awk खोल नहीं है Cfajohnson.com/shell/cus-faq-2.html#Q24 पर comp.unix.shell FAQ में प्रश्न 24 देखें।

अपना कोड लिखने का एक तरीका होगा:

 UL="AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW" NUSR=$(awk -F, -v ul="$UL" 'BEGIN{print gsub(FS,""); exit}') echo "$NUSR" echo "$UL" | awk -F, -v nusr="$NUSR" '{print $nusr}' # could have just done print $NF 

लेकिन आपके मूल प्रारंभिक बिंदु से:

 UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW) 

यूएल को सिर्फ एक प्रविष्टि के साथ एक सरणी के रूप में घोषित कर रहा था, आप फिर से सोचना चाहेंगे कि आप ऐसा करने का प्रयास क्यों कर रहे हैं क्योंकि आप पूरी तरह से गलत तरीके से हो सकते हैं