2011-10-26 10 views
8

द्वारा विभाजित नहीं करने का प्रयास कर रहा हूं मैं Awk के साथ दो फ़ील्ड (जहां कभी-कभी divisor शून्य हो सकता है) को विभाजित करने की कोशिश कर रहा हूं।Awk, शून्य

मुझे लगा कि यह काम करेगा: awk -F, '{if ($6 != 0) print $3/$6}' <some file>

लेकिन यह fatal: division by zero attempted साथ chokes भले ही मैंने सोचा था कि "अगर" हालत अगर क्षेत्र 6 शून्य है विभाजित करने के लिए नहीं ख्याल रखा।

मैं क्या देख रहा हूं?

+2

आप "awk -F, '$ 6! = 0 {प्रिंट $ 3/$ 6}' ..." भी लिख सकते हैं। यह समस्या को हल नहीं करेगा, लेकिन यह अधिक मूर्खतापूर्ण अजीब है। – onemasse

उत्तर

15

"बार"! = 0. यदि $ 6 एक स्ट्रिंग है, तो तुलना विफल हो जाती है, लेकिन जब विभाजन के लिए किसी संख्या में परिवर्तित किया जाता है तो यह शून्य का मूल्यांकन करता है।

 
if($6 + 0 != 0) 

का उपयोग करें।

+2

यिक्स! एक अच्छा अनुस्मारक जो अजीब था, पाठ-मंगिंग के लिए अद्भुत था, गणित के लिए डिजाइन नहीं किया गया था। –

+0

धन्यवाद, मैं उस बारे में भी Awk भूल गया था। –

+1

यह भाषा या कार्यान्वयन में एक बग है। यदि कोई स्ट्रिंग जो 'बार' जैसी संख्या की तरह नहीं दिखती है, तो ऑपरेटरों के तहत शून्य की तरह व्यवहार करता है जैसे कि संख्यात्मक ऑपरेंड के विपरीत '+', यह '= 'जैसे रिलेशनल ऑपरेटरों का उपयोग करते हुए किसी संख्या की तुलना में शून्य की तरह व्यवहार करना चाहिए। Awk प्रतिमान में रहते हुए यह ** ** पूरी तरह से अच्छी तरह से काम कर सकता है। – Kaz

संबंधित मुद्दे