linux - अजीब प्रिंट कॉलम $ 3 अगर $ 2== एक विशिष्ट मूल्य?




shell awk (4)

कृपया इसे आजमाएं

echo $VAR | grep ClNonZ | awk '{print $3}';

या

echo cat filename | grep ClNonZ | awk '{print $3}';

मैं अजीब प्रोग्रामिंग भाषा से अजीब सीख रहा हूं और इस उदाहरण से परेशान हूं।

अगर मैं $ 3 प्रिंट करना चाहता हूं तो $ 2 एक मान के बराबर है (उदाहरण '1'), और मैं इस कमांड का उपयोग कर रहा था जो ठीक काम करता है:

awk '$2==1 {print $3}' <infile> | more

लेकिन जब मैं किसी अन्य खोज मानदंड से 1 को प्रतिस्थापित करता हूं, उदाहरण के लिए 'findtext' और यह आदेश काम नहीं करता है।

awk '$1== findtext {print $3}' <infile> | more

यह कुछ भी आउटपुट नहीं देता है और मुझे यकीन है कि मैंने जो खोज किया है उसमें 'findtext' में मौजूद था। क्या मेरे वाक्यविन्यास में कुछ गड़बड़ है?

मैंने कोशिश की लेकिन यह काम नहीं करता है:

awk '$1== "findtext" {print $3}' <infile> | more

लेकिन जब मैं करता हूं

grep findtext <infile>  ## This does give me output

खोज टेक्स्ट $ 1 में मौजूद है क्योंकि मैंने दो बार चेक किया है।

उदाहरण के लिए 'टेस्ट' नामक मेरी टेस्ट फ़ाइल यहां है, इसमें 9 लाइनें और 8 फ़ील्ड हैं और स्पेस अलग है:

1 11 0.959660297 0 0.021231423 -0.0073 -0.0031 MhZisp
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
3 19 0.98089172 0 0 -0.0158 0.0124 MhNonZ
4 15 0.704883227 0.265392781 0.010615711 -0.0087 -0.0092 MhZisp
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
6 23 0.715498938 0 0.265392781 -0.0013 -0.0309 Unkn
7 26 0.927813163 0 0.053078556 -0.0051 -0.0636 MhZisp
8 44 0.55626327 0.222929936 0.201698514 0.0053 -0.0438 MhZisp
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ

यहां मैंने जो किया और आउटपुट:

$awk '$8 == "ClNonZ" {print $3}' test 

$ grep ClNonZ test 
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
9 31 0.492569002 0.350318471 0.138004246 0.0485 0.0088 ClNonZ

मुझे यह देखने की उम्मीद है कि $ 3 है जिसमें "$ 8 में" क्लोनज़ "है।

0.180467091 
0.010615711 
0.492569002

पता नहीं क्यों awk कमांड कुछ भी वापस नहीं किया था। कोई विचार?


मेरा अजीब संस्करण 3.1.5 है।

हां, इनपुट फ़ाइल स्पेस अलग है, कोई टैब नहीं है।

अरुताकू के जवाब के मुताबिक, मैंने जो काम किया वह मैंने किया:

awk '$8 ~ "ClNonZ"{ print $3; }' test  
0.180467091
0.010615711
0.492569002


$ awk '$8 ~ "ClNonZ" { print $3}' test  
0.180467091
0.010615711
0.492569002

क्या काम नहीं किया (मुझे नहीं पता कि क्यों और शायद मेरे अजीब संस्करण :) के कारण,

$awk '$8 ~ "^ClNonZ$"{ print $3; }' test
$awk '$8 == "ClNonZ" { print $3 }' test

आपके उत्तरों, टिप्पणियों और सहायता के लिए सभी का धन्यवाद!


यह मेरे लिए और अधिक पठनीय है

awk '{if ($2 ~ /findtext/) print $3}' <infile>

यह विधि regexp का उपयोग करती है, इसे काम करना चाहिए:

awk '$2 ~ /findtext/ {print $3}' <infile>




awk