AWK आदेशहरू र स्क्रिप्टहरू कसरी लेख्नुहुन्छ

आदेश, वाक्य रचना र उदाहरणहरू

अल्क आदेश पाठ फाइलहरू प्रसोधन वा विश्लेषण गर्न एक शक्तिशाली तरिका हो - विशेष गरी, डाटा फाइलहरू जुन रेखाहरू (पङ्क्तिहरू) र स्तम्भहरूद्वारा व्यवस्थित हुन्छन्।

साधारण अर्क आदेशहरू आदेश लाइनबाट चलाउन सकिन्छ। थप जटिल कार्यहरू फाइलमा अर्क कार्यक्रमहरू (भनिन्छ एक लिपिहरू) को रूपमा लेख्न सकिन्छ।

अर्क आदेशको आधारभूत ढाँचा यस्तो देखिन्छ:

awk 'pattern {action}' input-file> output-file

यो अर्थ: इनपुट फाइलको प्रत्येक रेखा लिनुहोस्; यदि रेखाले ढाँचा समावेश गर्दछ रेखाको कार्यलाई लागू गर्नुहोस् र परिणाम लाइनलाई आउटपुट फाइलमा लेख्नुहोस्। यदि ढाँचा हटाइयो भने, कार्य सबै रेखामा लागू हुन्छ। उदाहरणका लागि:

awk '{$ $ 5}' table1.txt> output1.txt

यो कथनले प्रत्येक रेखाको पाँचौं स्तम्भको तत्व लिन्छ र यसलाई आउटपुट फाइल "output.txt" मा रेखाको रूपमा लेख्दछ। चर '$ 4' ले दोस्रो स्तम्भलाई बुझाउँछ। त्यसै गरी तपाइँले पहिलो, दोस्रो, तेस्रो स्तम्भ $ 1, $ 2, $ 3, आदिसँग पहुँच गर्न सक्नुहुनेछ। पूर्वनिर्धारित स्तम्भहरू रिक्त ठाउँ वा ट्याबहरू (जसलाई सेतो स्पेस स्पेस) द्वारा विभाजित गरिन्छ। त्यसो भए, यदि आगत फाइल "table1.txt" ले यी रेखाहरू समावेश गर्दछ:

1, जस्टिन टिम्बरबेक, शीर्षक 545, मूल्य $ 7.30 2, टेलर स्विफ्ट, शीर्षक 723, मूल्य $ 7.90 3, मिक्स जागर, शीर्षक 610, मूल्य $ 7.90 4, लेडी गागा, शीर्षक 118, मूल्य $ 7.30 5, जनी नगद, शीर्षक 482, मूल्य $ 6.50 6, एल्विस प्रेस्ली, शीर्षक 335, मूल्य $ 7.30 7, जॉन लेनन, शीर्षक 271, मूल्य $ 7.90 8, माइकल जैक्सन, शीर्षक 373, मूल्य $ 5.50

त्यसपछि आदेशले निम्न रेखाहरूलाई निर्गत फाइल "output1.txt" मा लेख्छ:

545, 723, 610, 118, 482, 335, 271, 373,

यदि स्तम्भ विभाजक रिक्त स्थान वा ट्याबहरू भन्दा अन्य कुनै चीज हो, जस्तै अल्पविराम, तपाइँ निर्दिष्ट गर्न सक्नुहुन्छ कि निम्न रूपमा एक कथनमा:

awk -F, '{$ $ $}} table1.txt> output1.txt

यसले प्रत्येक रेखाको स्तम्भ 3 बाट तत्व चयन गर्नेछ यदि स्तम्भहरूलाई अल्पविरामद्वारा अलग गर्न सकिन्छ। यसैले, यस अवस्थामा, यो हुनेछ:

शीर्षक 545 शीर्षक 723 शीर्षक 610 शीर्षक 118 शीर्षक 482 शीर्षक 335 शीर्षक 271 शीर्षक 373

कर्तव्य कोष्ठकहरू ('{', '}') भित्र बयानहरूको सूची ब्लक भनिन्छ। यदि तपाईं एक ब्लक को सामने एक सशर्त अभिव्यक्ति राख्दछ भने, ब्लक भित्र बयान केवल हालत यदि निष्पादित गरिनेछ।

awk '$ 7 == "\ $ 7.30" {1 $ $}}' table1.txt

यस अवस्थामा, शर्त $ 7 == "\ $ 7.30" हो, जसको अर्थ 7 स्तम्भमा $ 730 को बराबर छ। डलरको चिन्हमा ब्याकस्ल्याश प्रयोग गर्न को लागी प्रयोग गर्न को लागी $ 7 को चरम को रूप मा व्याख्या गर्न को लागी र शाब्दिक डलर को बजाय शाब्दिक रूप ले।

त्यसो गर्दा यो एल्क विवरणले प्रत्येक रेखाको तेस्रो स्तम्भमा तत्वलाई बाहिर पुर्याउँछ जुन 7 9 मा "$ 7.30" रहेको छ।

तपाईं नियमित अभिव्यक्ति पनि शर्तको रूपमा प्रयोग गर्न सक्नुहुन्छ। उदाहरणका लागि:

awk '/ 30 / {print $ 3}' table1.txt

दुई स्ल्यासहरू बीचको स्ट्रिङ ('/') नियमित अभिव्यक्ति हो। यस अवस्थामा, यो केवल string "30." यसको अर्थ यदि रेखा "string" मा समावेश गर्दछ, प्रणालीले त्यो रेखाको तेस्रो स्तम्भमा तत्वलाई प्रिन्ट गर्दछ। उपरोक्त उदाहरणमा उत्पादन हुनेछ:

टिम्बरलेक, गागा, प्रेलेली,

यदि तालिका तत्त्वहरू अङ्क छन् भने यो उदाहरणमा तिनीहरूलाई गणना गणना गर्न सकिन्छ:

awk '{print ($ 2 * $ 3) + $ 7}'

चर विद्यमानका साथै हालको पङ्क्ति ($ 1, $ 2, आदि) को तत्त्वहरू त्यहाँ चर $ 0 हो जुन पूर्ण पङ्क्ति (रेखा) र चर एनएफ लाई बुझाउँछ जुन खेतीको संख्यामा छ।

तपाईं यस उदाहरणको रूपमा नयाँ चर परिभाषित गर्न सक्नुहुन्छ:

awk '{sum = 0; को लागि (col = 1; col <= NF; col ++) sum + = $ col; मुद्रण योग; } '

यसले प्रत्येक पङ्क्तिका सबै तत्त्वहरूको योगलाई गणना गर्दछ र छाप्छ।

थोक विवरणहरू प्राय: सय आदेशहरूसँग संयुक्त हुन्छन्।