2012-12-27 15 views
5

मैं इस तरह एक पाठ फ़ाइल है:awk: खोजने के लिए और निश्चित क्षेत्र में की जगह केवल

$ cat test 
12 13 22000 s 
12 13 32000 s 
100 13 2000 s 
12 13 300 s 

मैं केवल में 100 बदलना चाहते हैं:

$ cat test 
12 13 2100 s 
12 13 3100 s 
100 13 100 s 
12 13 300 s 

मैं उत्पादन इस तरह बनना चाहता हूँ फ़ील्ड 3 (100$3 में 2000 में निहित है। awk का उपयोग करके मैं इस नौकरी को कैसे पूरा कर सकता हूं?

awk '{ sub(/100$/, "2000", $3) }1' file 

परिणाम::

उत्तर

8

यहाँ एक ही रास्ता awk का उपयोग कर

12 13 22000 s 
12 13 32000 s 
100 13 2000 s 
12 13 300 s 
+0

की सुविधा देता है का कहना है कि 5000 के साथ मैं कैसे सब कुछ है कि 100 नहीं है जगह ले सकता है ? – discipulus

+1

@lovedynasty: आप कुछ ऐसा करने की कोशिश कर सकते हैं: 'awk' {sub (/ [^ 1] * [^ 0] * [^ 0] * /, "5000", $ 3)} 1 'file'। लेकिन यह आपको अपेक्षित नतीजे प्रदान नहीं कर सकता है। आम तौर पर जब मैं कुछ प्रकार के व्यस्त पैटर्न मिलान करना चाहता हूं, तो मैं कुछ प्रकार के [चारों ओर घूमने वाले] का उपयोग करना चाहता हूं (http://www.regular-expressions.info/lookaround.html)। दुर्भाग्य से, 'awk' इन का समर्थन नहीं करता है और मुझे एक और अधिक शक्तिशाली टूल का उपयोग करने की आवश्यकता होगी। मैं इसके बजाए 'ऑटो-स्प्लिट' मोड में 'perl' का उपयोग करूंगा। HTH। – Steve

1
awk '$3~/100/{gsub(/100/,"2000",$3)}1' your_file 
+0

क्षमा करें, मैंने समस्या का सही वर्णन नहीं किया है, मैंने अपनी समस्या अपडेट की है। –

+0

मैं सबकुछ कैसे बदल सकता हूं जो 100 नहीं है, 5000 कहें? – discipulus

1

प्रयास करें:

awk '{$3=gensub(100,2000,1,$3);print}' test.txt