सबसे पहले, आप परिवर्तनीय एफएस प्रत्येक पंक्ति को बदल रहे हैं; आप शायद एक बार इसे बदलने का इरादा रखते हैं। इसके अलावा, अगर आप एफएस को बदलना चाहते हैं, तो शायद आप किसी भी लाइन को पार्स किए जाने से पहले इसे बदलना चाहते हैं। POSIX के लिए आवश्यक है कि एफएस में कोई भी परिवर्तन केवल अगली लाइन के पार्सिंग को प्रभावित करेगा। (कई कार्यान्वयन अभी तक उस आवश्यकता के अनुरूप नहीं हैं, और मौजूदा लाइन के लिए एफएस के परिवर्तित मूल्य का उपयोग कर सकते हैं यदि वर्तमान लाइन अभी तक पार्स नहीं किया गया है।) इन दोनों मुद्दों को हल करने के लिए, आपको इस तरह के एफएस को बदलना चाहिए:
awk 'BEGIN { FS="\t" } {...}' A.txt
या इस:
awk -v 'FS=\t' '{...}' A.txt
(। वहाँ भी -v 'FS=\t'
के बजाय -F '\t'
का उपयोग कर एक रूप है, लेकिन awk के कुछ कार्यान्वयन पूर्व निर्माण में सी-भागने \t
सम्मान नहीं होगा)
बी ध्यान दें कि एफएस इनपुट डेटा के विश्लेषण को नियंत्रित करता है, जबकि ओएफएस आउटपुट डेटा के विश्लेषण को नियंत्रित करता है। यह आपके प्रश्न से स्पष्ट नहीं है जिसे आप करना चाहते हैं। पहली नज़र में, आपका इनपुट डेटा ऐसा नहीं लगता है कि इसमें कोई टैब है, इसलिए आप शायद एफएस को इसके डिफ़ॉल्ट मान पर छोड़ना चाहते हैं।
यदि आप आउटपुट स्वरूपण को बदलना चाहते हैं, तो आप ओएसएस को "\ t" पर सेट कर सकते हैं, जिसे हमने अभी भी एफएस के लिए वर्णित किया है। यह स्पष्ट नहीं है कि आप यही चाहते हैं, हालांकि, क्योंकि आप अपनी टेस्ट स्क्रिप्ट में ओएफएस का कोई उपयोग नहीं कर रहे हैं। जब आप कहते हैं: "-" और $ 2
print $1 " - " $2
आप एक ही तर्क है, जो $ 1 के संयोजन और है मुद्रण कर रहे हैं।ओएफएस का इस्तेमाल करते हैं करने के लिए, अगर आप इस तरह कई तर्क है, जो एक अल्पविराम से अलग किया जाएगा --- उदाहरण के लिए मुद्रित करने के लिए होगा:
print $1, $2
पहेली खेलना, मैं नमूना डेटा और आप उत्पादन वर्तमान में फिर से देखो । हो सकता है कि आपके नमूना डेटा में वास्तव में प्रारूप हो: B<space>A<tab>A1
, और शायद आप करें एफएस सेट करने का इरादा रखते हैं ताकि B<space>A
$ 1 में और A1
$ 2 में हथियाने के लिए किया जा सके। यदि यह सही है, तो बस किसी भी लाइन-प्रसंस्करण शुरू होने से पहले, सही समय पर एफएस सेट करना सुनिश्चित करें। तब आपकी स्क्रिप्ट को काम करना चाहिए इससे कोई फर्क नहीं पड़ता कि आप किस अजीब कार्यान्वयन का उपयोग करते हैं।
'awk -F "\ t"' {print $ 1 "-" $ 2} 'A.txt' के आउटपुट के साथ तुलना करें - सभी तीन पंक्तियों में पैटर्न समान है। तो आपके 'एफएस' का केवल एटीटीटी की पहली पंक्ति पर प्रभाव पड़ता है। – eumiro