2013-03-11 5 views
18

के बाद केवल स्ट्रिंग के पहले होने वाली घटना को खोजने के लिए अजीब का उपयोग करें मेरे पास दस्तावेज़ों का एक समूह है जिसमें सभी स्थानों पर Account number: 123456789 है।एक डेलीमीटर

मुझे जो करना है वह फाइलों के माध्यम से पार्स करने में सक्षम है, और खाता संख्या स्वयं ही पाएं। तो, awk को Account number: देखने की आवश्यकता है और तुरंत बाद में स्ट्रिंग वापस कर दें।

उदाहरण के लिए

, अगर यह था:

Account number: 1234567 

awk लौटना चाहिए:

1234567 

एक बार जब यह पहली घटना यह देख बंद कर सकते हैं पाया है।

लेकिन, मैं स्टंप हो गया हूं। awk का उपयोग करके ऐसा करने का सही तरीका क्या है?

उत्तर

30

एक ही रास्ता:

awk -F: '$1=="Account number"{print $2;exit;}' file 

मुझे लगता है कि आप जैसे ही आप फ़ाइल में पहला मामला लगता है बंद करना चाहते हैं। यदि आप फ़ाइल की प्रत्येक पंक्ति में घटनाएं खोजना चाहते हैं, तो बस exit हटा दें।

5

$1 और $2 बराबर "खाता" और "संख्या:" जांचने के लिए आप if का उपयोग कर सकते हैं। यदि वे ऐसा करते, तो $3 प्रिंट:

> awk '{if ($1 == "Account" && $2 == "number:") {print $3; exit;}}' input.txt 
+0

मुझे लगता है कि वास्तव में कैसे करना होगा? – DrDavid

+0

उदाहरण जोड़ा गया .. –

+1

अतिरिक्त '{}' क्यों? क्यों न केवल 'अजीब' $ 1 == "खाता" और $ 2 == "संख्या:" {$ 3 प्रिंट करें; बाहर निकलें} 'input.txt'? – tianon

0

तुम भी sed -n s///p इस्तेमाल कर सकते हैं: मैं के साथ grep उपयोग करने को प्राथमिकता

sed -En 's/^Account number: (.+)/\1/p' *.txt | head -n1 
3

ऐसे matchings के लिए लुक-पीछे:

grep -Po '(?<=Account number:)\d+' file 

या

grep -Po 'Account number: \K\d+' file 

यह कहते हैं: प्रिंट जो कुछ अनुक्रम अंक (\d+) स्ट्रिंगके बाद दिखाई दे रहा है।

दूसरेकेरे में, \K मिलान की गई स्ट्रिंग को साफ़ करता है, ताकि यह \K के बाद प्रिंटिंग शुरू कर दे।


यह कार्रवाई में देखें एक फ़ाइल file दिया:

Account number: 1234567 
but then another Account number: 789 
and that's all 

देखें कि उत्पादन की तरह लग रहा है:

$ grep -Po '(?<=Account number:)\d+' file 
1234567 
789 
संबंधित मुद्दे