awk - Picking out elements not in an 1-D array? -
मेरे पास 1-डी सरणी है
x1 = [1, 2, 3, ..., 10]
जो फ़ाइल x1.dat
में एक रिकार्ड (सभी एक पंक्ति पर) के रूप में संग्रहीत है, जो कॉमा से अलग है। x1.dat
पढ़ता है
1,2,3,4,5, ..., 10
और वहां हैं दो सरणियों
array1 = [1,3]
, और array2 = [4,7]
(तत्वों में < कोड> सरणी 1 और array2
सरणी के कुछ तत्व x1
) हैं।
मैं सभी तत्व का चयन करना चाहता हूं जो न तो है सरणी 1 और सरणी 2 में नहीं वांछित आउटपुट पढ़ा जाएगा
2,5,6,8,9,10
मैंने awk के साथ कोशिश की:
< कोड> $ awk 'BEGIN {array1 = (1,3); Array2 = (4,7)} {for (i = 1; i & lt; = nf; i ++) अगर ((($ i में a1)) & amp; amp; amp; & amp; amp; (! ($ I में a2))) {प्रिंट $ I}} 'x1.dat
यह काम नहीं करता है क्या आप कृपया मुझे इसे सही करने या इस चयन का बेहतर तरीका देकर सहायता कर सकते हैं?
आपने अपनी डेटा फ़ाइल का पाठ स्वरूप नहीं दिया है। मुझे लगता है कि यह प्रति पंक्ति एक तत्व है।
आपके कोड में आपके पास कुछ समस्याएं हैं I
- चर असाइनमेंट, आप उस तरह एक ओक एआरआई नहीं आवंटित कर सकते हैं।
-
में
उपयोग सरणी (वास्तव में हैशटेबल) कुंजी की जाँच कर रहा है मान।
यदि आप array1 और 2 को फ़ाइल में या 2 को डालते हैं, तो इनपुट कोड में नहीं, बल्कि मैं इसे वहां दिखा रहा हूं कि समस्या को हल करने के तरीके के रूप में ठीक से आपने वर्णन किया है
बेहतर संस्करण पढ़ें:
awk -v arr1 = "& lt; yourArray1Str & gt;" -वी arr2 = "& lt; yourArray2Str & gt;" 'BEGIN {विभाजित (arr1, a, ","); विभाजन (arr2, ख, ""); के लिए (एक्स में ए) के [एक [x]] = 1; के लिए (एक्स में बी) कश्मीर [बी [x]] = 1}! कश्मीर [$ 0] 'फ़ाइल कोड>
अपने उदाहरण के साथ:
$ kent बिल्ली 1 2 3 4 5 केंट $ अक्साक-वी एआर 1 = "2,4,3" -वी arr2 = "1,3,4" 'BEGIN {विभाजन (एरो 1, ए, ","); विभाजित (एआर 2, के लिए (एक्स में) कश्मीर [एक [x]] = 1; के लिए (एक्स में बी) कश्मीर [बी [x]] = 1}! कश्मीर [$ 0] 'एफ 5 कोड>
Comments
Post a Comment