चौड़ाई में प्रिंट प्रिंट संख्या और इसे गोल करें


20

मुझे एक नंबर प्रिंट आउट करने की आवश्यकता है , लेकिन दी गई चौड़ाई और गोल के साथ (awk के साथ!)

%10s

मेरे पास यह है और किसी तरह मुझे कनेक्ट करने की आवश्यकता है %dलेकिन मैं जो कुछ भी करता हूं, वह जागने के लिए बहुत अधिक पैरामीटर्स के साथ समाप्त होता है (क्योंकि मेरे पास अधिक कॉलम हैं)।

जवाबों:


27

आप यह कोशिश कर सकते हैं:

$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
  4

हमारे प्रारूप विकल्प के दो भाग हैं:

  • 3: अर्थ आउटपुट को 3 अक्षरों में रखा जाएगा।
  • .0f: अर्थ आउटपुट का कोई सटीक अर्थ नहीं होगा, जिसका अर्थ है गोल।

से man awk, आप अधिक विवरण देख सकते हैं:

width   The field should be padded to this width. The field is normally padded
        with spaces. If the 0  flag  has  been  used, it is padded with zeroes.

.prec   A number that specifies the precision to use when printing.  For the %e,
        %E, %f and %F, formats, this specifies the number of digits you want
        printed to the right of the decimal point. For the %g, and %G formats,
        it specifies the maximum number of significant  digits. For the %d, %o,
        %i, %u, %x, and %X formats, it specifies the minimum number of digits to
        print. For %s, it specifies the maximum number of characters from the
        string that should be printed.

9

%fप्रारूप विनिर्देशक का उपयोग करते हुए , आपका (अस्थायी बिंदु) नंबर स्वचालित रूप से आपके द्वारा निर्दिष्ट के रूप में गोल हो जाएगा। उदाहरण के लिए, मान से लेकर पूरी संख्या तक का उपयोग करना

$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2

यदि आप और अधिक अनुगामी अंक चाहते हैं, तो बस परिशुद्धता बदल दें।


है /dev/nullआवश्यक?
अविनाश राज

यदि आपके केवल कथन BEGINब्लॉक में हैं, तो यह नहीं है। मैंने पहले सामान्य शरीर में अभिव्यक्ति के साथ परीक्षण किया, इस प्रकार मैया पुलपा। धन्यवाद, @Gnouc
एंड्रियास विसे

3

Awk नीचे स्प्रिंटफ का उपयोग करता है और यह निष्पक्ष राउंडिंग करता है, इसलिए आपके प्लेटफ़ॉर्म के आधार पर यदि आप इसे हमेशा के लिए चाहते हैं तो आपको कुछ इस तरह से उपयोग करने की आवश्यकता हो सकती है:

awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"

इसे साकार नहीं करने से सूक्ष्म लेकिन गंदा कीड़े हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.