खोज…


दो फ़ाइलों में मिलान फ़ील्ड्स की जाँच करें

इन दो CSV फ़ाइलों को देखते हुए:

$ cat file1
1,line1
2,line2
3,line3
4,line4
$ cat file2
1,line3
2,line4
3,line5
4,line6

में उन पंक्तियों को मुद्रित करने के file2 जिसका दूसरे स्तंभ पहली फ़ाइल हम कह सकते हैं में भी होती है:

$ awk -F, 'FNR==NR {lines[$2]; next} $2 in lines' file1 file2
1,line3
2,line4

यहाँ, lines[] एक ऐसा सरणी रखती हैं जो प्रत्येक पंक्ति के दूसरे क्षेत्र की सामग्री के साथ file1 को पढ़ते समय आबाद हो जाती है।

फिर, file2 $2 in lines प्रत्येक पंक्ति के लिए, $2 in lines चेक $2 in lines शर्त $2 in lines , अगर सरणी में 2 क्षेत्र मौजूद है। यदि ऐसा है, तो स्थिति सही है और awk अपनी डिफ़ॉल्ट कार्रवाई करता है, जिसमें पूरी लाइन को प्रिंट करना शामिल है।

यदि केवल एक क्षेत्र को मुद्रित करने की आवश्यकता थी, तो यह अभिव्यक्ति हो सकती है:

$ awk -F, 'FNR==NR {lines[$2]; next} $2 in lines {print $1}' file1 file2
1
2

दो फ़ाइलों को पढ़ते समय awk चर प्रिंट करें

मुझे उम्मीद है कि इस उदाहरण से सभी को यह समझने में मदद मिलेगी कि एनआर, एफएनआर आदि जैसे आंतरिक चर कैसे बदलते हैं जब जाग दो फ़ाइलों को संसाधित कर रहा होता है।

awk '{print "NR:",NR,"FNR:",FNR,"fname:",FILENAME,"Field1:",$1}' file1 file2
NR: 1 FNR: 1 fname: file1 Field1: f1d1
NR: 2 FNR: 2 fname: file1 Field1: f1d5
NR: 3 FNR: 3 fname: file1 Field1: f1d9
NR: 4 FNR: 1 fname: file2 Field1: f2d1
NR: 5 FNR: 2 fname: file2 Field1: f2d5
NR: 6 FNR: 3 fname: file2 Field1: f2d9

जहां file1 और file2 दिखता है:

$ cat file1
f1d1 f1d2 f1d3 f1d4

$ cat file2
f2d1 f2d2 f2d3 f2d4

ध्यान दें कि सभी फ़ाइलों के बीच NR मान कैसे बढ़ता रहता है, जबकि FNR प्रत्येक फ़ाइल पर रीसेट करता है। यही कारण है कि अभिव्यक्ति NR==FNR हमेशा NR==FNR गई पहली फ़ाइल को संदर्भित करता है, क्योंकि केवल पहली फ़ाइल में NR को FNR बराबर होना FNR



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow