Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

उदाहरण के साथ, बैश/शेल में प्रिंटफ कमांड का उपयोग करना

यह लेख आपको printf . का उपयोग करने के लिए कुछ व्यावहारिक उदाहरण दिखाएगा Linux पर बैश/शैल में कमांड करें।

प्रिंटफ़ कमांड टेक्स्ट को काफी हद तक इको . जैसा आउटपुट देता है कमांड करता है - लेकिन यह आउटपुट स्वरूपण पर अधिक नियंत्रण की अनुमति देता है।

यह आपके स्वयं के स्वरूपित टेक्स्ट आउटपुट को उत्पन्न करने के लिए एक उपयोगी टूल है - विशेष रूप से यदि आपको टेक्स्ट में वेरिएबल्स को एम्बेड करने की आवश्यकता है, न्यूलाइन्स शामिल करें, टेक्स्ट को संरेखित करें और प्रारूपित करें, और यहां तक ​​​​कि परिवर्तित मान भी प्रदर्शित करें।

प्रिंटफ सिंटैक्स

Printf कमांड में निम्नलिखित सिंटैक्स होता है:

printf [-v var] format [arguments]...

ध्यान दें कि:

  • द -v विकल्प प्रिंटफ को परिणाम को वेरिएबल var . में संग्रहीत करने के लिए कहता है इसे प्रिंट करने के बजाय
  • प्रारूप एक स्ट्रिंग है जिसमें तीन अलग-अलग मानों का संयोजन होता है:
    • सामान्य वर्ण जो शब्दशः मुद्रित होंगे
    • बैकस्लैश से बचने वाले वर्ण जिन्हें मुद्रित होने से पहले व्याख्यायित किया जाता है
    • रूपांतरण जो निर्दिष्ट किए गए हैं और उनके संबंधित तर्कों के साथ प्रतिस्थापित किए गए हैं (उन्हें कुछ चर की तरह समझें)
  • तर्क प्रारूप . में पास कर दिया जाएगा और किसी भी परिभाषित रूपांतरण में उपयोग किया जाता है
    • यदि रूपांतरण विनिर्देशक से अधिक तर्क प्रारूप में मौजूद हैं, तो प्रारूप स्ट्रिंग सभी तर्कों . तक दोहराई जाती है इस्तेमाल किया गया है
    • यदि कम तर्क मौजूद हैं, तो संख्यात्मक विनिर्देशक शून्य पर सेट होते हैं, और स्ट्रिंग विनिर्देशक शून्य पर सेट होते हैं

एस्केप्ड कैरेक्टर, कन्वर्ज़न और फ़्लैग को प्रिंट करें

प्रिंटफ विकल्पों का एक विशाल संग्रह है जो इसे पाठ को असंख्य तरीकों से प्रारूपित करने के लिए पास किया जा सकता है। नीचे दिए गए उदाहरण आपको कुछ व्यावहारिक अनुप्रयोग दिखाएंगे।

सूची के बजाय प्रत्येक विकल्प जिसे यहां कमांड को पास किया जा सकता है, आप printf के लिए पूर्ण उपयोगकर्ता पुस्तिका देख सकते हैं चलाकर अपने सिस्टम पर कमांड करें:

man printf

प्रिंटफ बैश/शैल उदाहरण

ठीक है, तो यह सब वास्तव में किसके लिए अच्छा है?

संख्याओं के गोल मान प्रदर्शित करना

सबसे पहले, एक साधारण परिदृश्य - आप प्रदर्शित करने के लिए एक संख्या को दो दशमलव स्थानों पर प्रारूपित करना चाहते हैं:

printf "%.2f" 4.21423557

यह आउटपुट करेगा:

4.21

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

यह दशमलव स्थानों की दी गई संख्या को छोटा करने के बजाय संख्या को गोल कर देगा। फ़्लोटिंग-पॉइंट नंबरों की गोलाई अजीब है - इसलिए अपना आउटपुट जांचें!

गोल अजीबता

इस विचित्रता को स्पष्ट करने के लिए, निम्नलिखित पर विचार करें:

printf "%.2f" 4.215

यह 4.22 होना चाहिए, है ना? गलत। printf . के zsh कार्यान्वयन में , इसे गोल किया जाएगा:

4.21

यह पुष्टि करने के लिए कि नंबर है वास्तव में गोल किया जा रहा है, हम एक अलग मूल्य की जांच कर सकते हैं:

printf "%.2f" 4.216

जो लौटेगा:

4.22

... इसलिए नंबर को printf . को पास किया जा रहा है है गोल किया जा रहा है।

तो 4.215 . का गोल मान क्यों है गलत प्रतीत होता है? सीधे शब्दों में कहें तो, क्योंकि यह एक फ्लोटिंग-पॉइंट नंबर है, त्रुटि प्रदर्शित मूल्य और गणना में कंप्यूटर द्वारा उपयोग किए गए मूल्य के बीच असमानता के कारण होती है।

इसके आसपास के तरीके हैं, लेकिन यह इस लेख के दायरे से बाहर है - मैं इसे दूसरे में शामिल करूंगा।

मान परिवर्तित करना (दशमलव, हेक्साडेसिमल, अष्टक)

एक सामान्य परिदृश्य - आप कुछ संख्याओं को किसी अन्य प्रारूप में प्रदर्शित करना चाहते हैं, जिसके अलावा उन्हें किसी अन्य प्रोग्राम या स्क्रिप्ट द्वारा आपूर्ति की गई थी। प्रिंटफ इसके रूपांतरण विनिर्देश सिंटैक्स का उपयोग करके ऐसा कर सकते हैं:

printf "Decimal: %d\nHexadecimal: %x\nOctal: %o\n" 64 64 64

यह आउटपुट करेगा:

Decimal: 64
Hexadecimal: 40
Octal: 100

संख्या 64 फ़ॉर्मेटर को 3 बार पास किया जाता है और तीन अलग-अलग स्वरूपों में प्रदर्शित किया जाता है।

सुंदर आउटपुट बनाना

नीचे दिया गया उदाहरण printf . का उपयोग करके एक फ़ॉर्मेट की गई तालिका को आउटपुट करता है - जैसे ही हम टिप्पणियों में जाएंगे, मैं समझाऊंगा, इसलिए यह स्पष्ट है कि क्या हो रहा है:

#/bin/bash

# Define the format for the header text
# This is a new line (\n) followed by a left-aligned string of 15 characters (%-15s), followed by a string of 15 characters (%15s), finally followed by a string of 10 characters (%10s) and another newline
header_format="\n %-15s %15s %10s\n"

# Define the format for the data in each row
# The first two entries mirror those in the header, but the final one is a bit different - a floating number with 2 decimal places(%11.2f) 
row_format=" %-15s %15s %11.2f\n"

# Use the printf command to print the header
# The format is specified, and the arguments containing the column names for the table are supplied
# printf will take the header_format, and insert the values from the attributes into it, formatted to the given specification, then print it
printf "$header_format" "CAR BRAND" "COLOUR" "TOP SPEED"

# Print the horizontal line under the table header
# Here, printf is used to print an equals symbol.  Brace expansion (the curly braces) is a shell scripting shortcut which will run the printf command for every number between 1 and 50, repeating the symbol 50 times to create a line
printf '=%.0s' {1..50}

# Print each row of data using the row_format.  Each line (indicated by a backslash and a line return) contains three values - the car brand, colour, and top speed
# Any value with a space needs to be quoted as values are separated by spaces and printf won't be able to tell where one value ends and another begins
printf "$row_format" \
Toyota Blue 100 \
Ford "Light Green" 78.3875 \
"General Motors" Purple 15.96

इस स्क्रिप्ट को चलाने से आउटपुट होगा:

CAR BRAND                COLOUR  TOP SPEED
==================================================
Toyota                     Blue      100.00
Ford                Light Green       78.39
General Motors           Purple       15.96

printf . द्वारा डेटा को किस प्रकार फ़ॉर्मेट किया गया है, इस पर सावधानीपूर्वक नज़र डालें यहां। जहां हेडर और पंक्तियों के लिए एक निश्चित वर्ण लंबाई के तार निर्दिष्ट किए गए थे, टेक्स्ट संरेखित होता है। शीर्ष गति को दो दशमलव स्थानों पर स्वरूपित किया गया है और सही स्थिति में रखा गया है। पहले कॉलम के लिए निर्दिष्ट किए गए स्थान को छोड़कर टेक्स्ट को राइट-अलाइन किया गया है।

सिंटैक्स की अपेक्षाकृत कम मात्रा के साथ, पढ़ने में मुश्किल डेटा को उपयोगी जानकारी में बदल दिया गया है।

आकाश की सीमा

आप printf . का उपयोग करने के लिए अपने स्वयं के कारणों के साथ आएंगे - स्क्रिप्ट के लिए सुंदर मेनू के साथ कमांड-लाइन इंटरफेस का निर्माण, डेटाबेस प्रश्नों के परिणामों को सारणीबद्ध करना - यह आपके बैग में रखने के लिए एक शक्तिशाली उपकरण है, खासकर यदि आप किसी को बिना स्वरूपित पाठ को डंप करने के बजाय एक स्लीक-दिखने वाली शेल स्क्रिप्ट से प्रभावित करना चाहते हैं। स्क्रीन।

आप printf . को जोड़ सकते हैं Linux में अन्य टेक्स्ट हैंडलिंग कमांड के साथ।


  1. उदाहरण के साथ, लिनक्स में वॉच कमांड का उपयोग कैसे करें

    लिनक्स में वॉच कमांड एक काम करता है - एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहां इसका उपयोग करने का तरीका बताया गया है। कमांड सिंटैक्स देखें वॉच कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: विकल्प नीचे दी गई तालिका

  1. बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

    बैश शेल फ़ंक्शन समूह के लिए एकल नाम का उपयोग करके बाद में निष्पादन के लिए कई UNIX / Linux कमांड को समूहबद्ध करने का एक तरीका है। . बैश शेल फ़ंक्शन को नियमित यूनिक्स कमांड की तरह ही निष्पादित किया जा सकता है। शेल फ़ंक्शंस को मौजूदा शेल संदर्भ में उनकी व्याख्या करने के लिए कोई नई प्रक्रिया बनाए बिना न

  1. बैश स्क्रिप्टिंग परिचय ट्यूटोरियल 5 व्यावहारिक उदाहरणों के साथ

    हमारी चल रही यूनिक्स सेड और यूनिक्स Awk श्रृंखला के समान, हम बैश स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो सभी बैश स्क्रिप्टिंग तकनीकों को व्यावहारिक उदाहरणों के साथ कवर करेगा। शेल एक प्रोग्राम है, जो यूजर कमांड की व्याख्या करता है। कमांड या तो उपयोगकर्ता द्वारा सीधे दर्ज किए जाते हैं या शेल स्क्रिप्