2017-02-22 23 views
5

man पृष्ठ से:रूबी-ए कमांड लाइन स्विच क्या है?

-a  Turns on auto-split mode when used with -n or -p. 
     In auto-split mode, Ruby executes 
       $F = $_.split 
     at beginning of each loop. 
कुछ सवाल

दिमाग में आते हैं:

  • जब -a-n या -p बिना प्रयोग किया जाता है तो क्या होगा?
  • $F क्या है?
  • लूप के अंत में क्या होता है?
  • मैं कैसे नियंत्रित करूं कि कौन सा चरित्र split पर चुना गया है?
  • -a का उपयोग कैसे किया जा सकता है?

एक और reference page से:

$F  The variable that receives the output from split when -a is specified. 
     This variable is set if the -a command-line option is specified 
     along with the -p or -n option. 

मैं अभी भी यकीन है कि क्या -a स्विच है नहीं कर रहा हूँ। एक स्पष्टीकरण की सराहना करेंगे लेकिन कुछ उदाहरणों की सराहना करेंगे।

कुछ बातें मैं कोशिश की है:

$ echo foo_bar_bar | ruby -ae 
ruby: no code specified for -e (RuntimeError) 
$ echo foo_bar_bar | ruby -ap 
$ echo foo_bar_bar | ruby -ap '$_' 
ruby: No such file or directory -- $_ (LoadError) 

उत्तर

4

ऑटो विभाजन मोड -a स्विच के साथ सक्षम है। यह टेक्स्ट प्रसंस्करण की तरह सक्षम बनाता है जो awk डिफ़ॉल्ट रूप से करता है।
ऑटो विभाजन मोड में, गहरे लाल रंग का तर्क या एक समय में stdin एक पंक्ति के रूप में दिया फ़ाइलों को पढ़ने जाएगा, और प्रत्येक पंक्ति के लिए:

  1. स्वचालित रूप से, रेखा, $_ विभाजित क्षेत्रों में एक क्षेत्र विभाजक के अनुसार (-F झंडा द्वारा नामित)
  2. $F
  3. नामक एक चर के लिए परिणाम आवंटित कार्यों कमांड लाइन के माध्यम से प्रदान करते हैं।

सभी लाइनों को संसाधित करने के बाद, कार्यक्रम END block से बाहर निकलता है या निष्पादित करता है। example के लिए यह उत्तर देखें।

ऑटो विभाजन विधा है कि कई records (records लाइनों जब तक record separator बदल गया है कर रहे हैं) सारणीबद्ध पाठ फ़ाइलें और प्रत्येक पंक्ति में सीमांकित fields के एक नंबर के साथ काम करने के लिए उपयोगी है। प्रत्येक पंक्ति के लिए

ADG:YUF:TGH 
UIY:POG:YTH 
GHJUR:HJKL:GHKIO 

फिर ruby -F: -a -n -e 'puts $F[2]' file प्रिंट तीसरे क्षेत्र: उदाहरण के लिए, सामग्री के साथ एक file पर विचार

$ ruby -F: -a -n -e 'puts $F[2]' file 
TGH 
YTH 
GHKIO 

इस मामले में, -F:: के क्षेत्र विभाजक सेट। $F वह सरणी है जहां फ़ील्ड रिकॉर्ड के बाद रहते हैं ($_) विभाजित है। विभाजन के बाद प्रत्येक पंक्ति के लिए -e के बाद क्रियाएं निष्पादित की जाती हैं।

ruby क्ली स्विच perl के समान हैं। perl क्ली इस सुविधा को और अधिक सुविधाजनक बनाता है, perldoc perlrun देखें। उदाहरण के लिए, -a-n (या -p) के बिना उपयोगी नहीं है, perl में, -F-a को तत्काल रूप से सक्षम बनाता है, जो बदले में -n सक्षम करता है। यह ruby के साथ मामला नहीं है, सभी स्विच स्पष्ट रूप से पारित किए जाने चाहिए। इस तरह की प्रसंस्करण के साथ अच्छी चीजों के उदाहरणों के लिए awk one liners देखें।

इसके अलावा, ruby CLI command-line options पारित करने के लिए यूनिक्स सम्मेलनों इस प्रकार है:

परंपरागत रूप से, यूनिक्स कमांड लाइन विकल्प, एक पानी का छींटा से मिलकर बनता है एक या अधिक छोटे अक्षरों का स्थान है।

तो -a और -nswitches और -eflag एक ही परिणाम प्राप्त करने के लिए जोड़ा जा सकता है:

$ ruby -F: -ane 'puts $F[2]' file 
TGH 
YTH 
GHKIO 

यदि यह दिलचस्प है, बाहर कुछ अन्य ruby one liners.

जाँच