2009-10-01 12 views
44

में पंक्ति और तत्व का चयन करें मैंने सीखा है कि $ 2 दूसरा कॉलम है। Ith पंक्ति और जेथ कॉलम पर ith लाइन और तत्व निर्दिष्ट कैसे करें?अजीब

awk 'FNR == 5 {print $3}' 

संपादित:

awk '{print $2}' 

पांचवीं पंक्ति के तीसरे क्षेत्र मुद्रित करने के लिए:

awk 'FNR == 2 {print}' 

दूसरे क्षेत्र मुद्रित करने के लिए:

उत्तर

104

दूसरी पंक्ति मुद्रित करने के लिए : यहां एक हेडर लाइन और (अनावश्यक) फ़ील्ड विवरण वाला एक उदाहरण दिया गया है एस:

awk 'BEGIN {print "Name\t\tAge"} FNR == 5 {print "Name: "$3"\tAge: "$2}' 

रास्ते में "\ t \ t" से कॉलम संरेखित करने के बेहतर तरीके हैं।

+0

धन्यवाद! क्या कॉलम को एक विशिष्ट स्ट्रिंग के साथ मुद्रित करना संभव है? – Tim

21

डेनिस के जवाब पर विस्तार करने के लिए, i और j मूल्यों पारित करने के लिए उपयोग करें awk के -v विकल्प:

# print the j'th field of the i'th line 
awk -v i=5 -v j=3 'FNR == i {print $j}' 
+0

क्या हमारे पास एक उदाहरण है जब -v विकल्प का उपयोग करने में मदद मिलेगी? –

+1

यहां एक है: http://stackoverflow.com/q/9418617/7552 –

+1

@ मिठाई 'j' मान '3' के साथ भर जाती है, इसलिए जब यह' $ $ प्रिंट 'करता है तो यह' प्रिंट $ 3' कर रहा है ' तीसरे कॉलम को प्रिंट कर रहा है, इसलिए यह सही है क्योंकि यह खड़ा है। –

25

एक विशिष्ट स्ट्रिंग के साथ कॉलम मुद्रित करने के लिए, आप // खोज पैटर्न का उपयोग करें।

awk '$2 ~ /abc/' 

... और आप केवल एक विशेष कॉलम मुद्रित करने के लिए चाहते हैं::

awk '$2 ~ /abc/ { print $3 }' 

... और के लिए एक विशेष लाइन उदाहरण के लिए, आप दूसरे कॉलम के लिए देख रहे हैं कि एबीसी शामिल संख्या:

awk '$2 ~ /abc/ && FNR == 5 { print $3 }' 
+0

"~" उपयोग दिखाने के लिए धन्यवाद –

0

चूंकि अजीब और perl निकट से संबंधित हैं ...


की

पर्ल समकक्ष @ डेनिस के awk समाधान:
perl -ne 'print if $. == 2' file

दूसरे क्षेत्र मुद्रित करने के लिए:

दूसरी पंक्ति मुद्रित करने के लिए
perl -lane 'print $F[1]' file

तीसरे क्षेत्र मुद्रित करने के लिए पांचवीं पंक्ति का:
perl -lane 'print $F[2] if $. == 5' file


@ ग्लेन के समाधान के पर्ल बराबर:

:

प्रिंट लाइन

perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file


@ Hai के समाधान के पर्ल समकक्ष i'th की j'th क्षेत्र

यदि आप दूसरे कॉलम की तलाश में हैं जिसमें एबीसी है:

perl -lane 'print if $F[1] =~ /abc/' foo

... और आप केवल एक विशेष कॉलम मुद्रित करने के लिए चाहते हैं:

perl -lane 'print $F[2] if $F[1] =~ /abc/' foo

... और एक विशेष लाइन नंबर के लिए:

perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo


-l नई पंक्तियां निकाल देता है, और उन्हें वापस कहते हैं जब
-a autosplits सरणी @F में इनपुट लाइन मुद्रण में, इनपुट फ़ाइल
-e की प्रत्येक पंक्ति के ऊपर परिसीमक के रूप में खाली स्थान के का उपयोग कर
-n पाश उद्धरण के भीतर कोड निष्पादित
$F[1] है सरणी का दूसरा तत्व, पर्ल के बाद से शुरू होता है पर 0
$. लाइन नंबर

0

मैं इस काम कर रहे आदेश मिल गया है

जड़ @ प्रवेश द्वार:/घर/sshuser # एडब्ल्यूएस EC2 का वर्णन-उदाहरणों --instance-आईडी i-2db0459d | ग्रेप 'राज्य \ | टैग' |

राज्य awk 'एफ एन आर == 1 {$ 1 प्रिंट}'