printf - تنسيق وطباعة البيانات
على عكس الأوامر الأخرى في هذا الفصل ، فإن printf لا يتم استخدام الأمر في خطوط الأنابيب (لا يقبل الإدخال القياسي) ولا يجد التطبيق المتكرر مباشرة على سطر الأوامر (يستخدم غالبًا في البرامج النصية). فلماذا هو مهم؟ لأنه يستخدم على نطاق واسع.
تم تطوير printf (من العبارة "print formatted") في الأصل للغة البرمجة C وتم تنفيذه في العديد من لغات البرمجة بما في ذلك shell. في الواقع ، في bash ، تعتبر printf مدمجة.
يعمل printf مثل هذا:
printf "شكل" الحجج
يتم إعطاء الأمر سلسلة تحتوي على وصف تنسيق يتم تطبيقه بعد ذلك على قائمة من الوسائط. يتم إرسال النتيجة المنسقة إلى الإخراج القياسي. هنا امتحان بسيط:
[me @ linuxbox ~] $ printf "لقد قمت بتنسيق السلسلة:٪ s \ n" foo
لقد قمت بتنسيق السلسلة: foo
[me @ linuxbox ~] $ printf "لقد قمت بتنسيق السلسلة:٪ s \ n" foo
لقد قمت بتنسيق السلسلة: foo
قد تحتوي سلسلة التنسيق على نص حرفي (مثل "نسقت السلسلة:") ، متسلسلات الهروب (مثل \n، حرف سطر جديد) ، والتسلسلات التي تبدأ بـ % الشخصية التي تسمى مواصفات التحويل. في المثال أعلاه ، مواصفات التحويل %s تُستخدم لتنسيق السلسلة "foo" ووضعها في إخراج الأمر. ها هو مرة أخرى:
[me @ linuxbox ~] $ printf "لقد قمت بتنسيق '٪ s' كسلسلة. \ n" foo
لقد قمت بتنسيق "foo" كسلسلة.
[me @ linuxbox ~] $ printf "لقد قمت بتنسيق '٪ s' كسلسلة. \ n" foo
لقد قمت بتنسيق "foo" كسلسلة.
كما نرى ، فإن %s يتم استبدال مواصفات التحويل بالسلسلة "foo" في إخراج الأمر. يستخدم التحويل s لتنسيق بيانات السلسلة. هناك محددات أخرى لأنواع أخرى من البيانات. يسرد هذا الجدول أنواع البيانات شائعة الاستخدام:
جدول 21-4: محددات أنواع البيانات العامة printf
وصف المحدد
وصف المحدد
د تنسيق رقم كعدد صحيح عشري بعلامة.
f تنسيق وإخراج رقم فاصلة عائمة.
o تنسيق عدد صحيح كرقم ثماني.
s تنسيق سلسلة.
x قم بتنسيق عدد صحيح كرقم سداسي عشري باستخدام الحرف الصغير af عند الحاجة.
X مثل x لكن استخدم الأحرف الكبيرة.
٪ طباعة رمز٪ حرفي (أي تحديد "٪٪")
سنوضح تأثير كل من محددات التحويل على السلسلة "380":
[me @ linuxbox ~] $ printf "٪ d،٪ f،٪ o،٪ s،٪ x،٪ X \ n" 380 380 380 380
380 380
380 ، 380.000000 ، 574 ، 380 ، 17 ج ، 17 ج
[me @ linuxbox ~] $ printf "٪ d،٪ f،٪ o،٪ s،٪ x،٪ X \ n" 380 380 380 380
380 380
380 ، 380.000000 ، 574 ، 380 ، 17 ج ، 17 ج
نظرًا لأننا حددنا ستة محددات للتحويل ، يجب علينا أيضًا توفير ست حجج لـ
printf للمعالجة. تظهر النتائج الستة تأثير كل محدد.
يمكن إضافة العديد من المكونات الاختيارية إلى محدد التحويل لضبط إخراجها. قد تتكون مواصفات التحويل الكاملة مما يلي:
%[الأعلام][عرض][.الاحكام] تحويل_المواصفات
يجب أن تظهر المكونات الاختيارية المتعددة ، عند استخدامها ، بالترتيب المحدد أعلاه ليتم تفسيرها بشكل صحيح. فيما يلي وصف لكل:
جدول 21-5: مكونات مواصفات التحويل printf
وصف القطع
وصف القطع
الأعلام هناك خمسة أعلام مختلفة:
# - استخدم "التنسيق البديل" للإخراج. هذا يختلف حسب نوع البيانات. لتحويل o (رقم ثماني) ، يكون الإخراج مسبوقًا بـ
0. بالنسبة إلى تحويلات x و X (رقم سداسي عشري) ، يكون الناتج مسبوقًا بـ 0x أو 0X على التوالي.
0– (صفر) حشو الإخراج بالأصفار. هذا يعني أنه سيتم ملء الحقل بالأصفار البادئة ، كما في "000380".
- - (اندفاعة) يسار محاذاة الإخراج. بشكل افتراضي ، تقوم printf إلى اليمين بمحاذاة الإخراج.
"- (مسافة) أنتج مسافة بادئة للأرقام الموجبة.
+ - (علامة زائد) قم بتوقيع أرقام موجبة. بشكل افتراضي ، printf فقط
علامات الأرقام السالبة.
العرض رقم يحدد الحد الأدنى لعرض الحقل.
.الاحكام بالنسبة لأرقام الفاصلة العائمة ، حدد عدد أرقام الدقة المطلوب إخراجها بعد الفاصلة العشرية. لتحويل السلسلة ، دقة يحدد عدد الأحرف التي سيتم إخراجها.
فيما يلي بعض الأمثلة على التنسيقات المختلفة قيد التشغيل:
جدول 21-6: أمثلة لمواصفات تحويل الطباعة
حجة | شكل | نتيجة | ملاحظة |
380 | "٪د" | 380 | تنسيق بسيط لملف |
عدد صحيح. | |||
380 | "٪ # x" | 0x17c | عدد صحيح منسق كملف |
رقم سداسي عشري باستخدام | |||
علامة "التنسيق البديل". | |||
380 | "٪ 05d" | 00380 | عدد صحيح منسق بـ |
الأصفار البادئة (المساحة المتروكة) | |||
وعرض الحقل الأدنى | |||
من خمسة أحرف. | |||
380 | "٪ 05.5f" | 380.00000 | رقم منسق كملف |
رقم الفاصلة العائمة مع | |||
المساحة المتروكة وخمسة عشرية | |||
أماكن الدقة. حيث | |||
الحد الأدنى المحدد | |||
عرض المجال (5) أقل من | |||
العرض الفعلي لـ | |||
رقم منسق ، فإن | |||
الحشو ليس له تأثير. | |||
380 | "٪ 010.5f" | 0380.00000 | عن طريق زيادة |
الحد الأدنى لعرض الحقل إلى 10 | |||
المساحة المتروكة مرئية الآن. | |||
380 | "٪ + d" | 380+ | إشارة + إشارة إيجابية |
عدد. | |||
380 | "٪-د" | 380 | - العلم الأيسر يحاذي |
التنسيق. |
com.abcdefghijk | "٪ 5s" | أبسيدفجيك | سلسلة منسقة بعرض حقل أدنى. |
com.abcdefghijk | "٪ .5s" | ABCDE | من خلال تطبيق الدقة على سلسلة ، يتم قطعها. |
مرة أخرى، printf يتم استخدامه في الغالب في البرامج النصية حيث يتم استخدامه لتنسيق البيانات الجدولية ، بدلاً من سطر الأوامر مباشرة. لكن لا يزال بإمكاننا إظهار كيف يمكن استخدامه لحل مشكلات التنسيق المختلفة. أولاً ، لنخرج بعض الحقول مفصولة بأحرف جدولة:
[me @ linuxbox ~] $ printf "٪ s \ t٪ s \ t٪ s \ n" str1 str2 str3
str1 str2 str3
[me @ linuxbox ~] $ printf "٪ s \ t٪ s \ t٪ s \ n" str1 str2 str3
str1 str2 str3
عن طريق إدخال \t (تسلسل الهروب لعلامة تبويب) ، نحقق التأثير المطلوب. بعد ذلك ، بعض الأرقام بتنسيق أنيق:
[me @ linuxbox ~] $ printf "سطر:٪ 05d٪ 15.3f النتيجة:٪ + 15d \ n" 1071 3.14156295 32589
الخط: 01071 3.142 النتيجة: +32589
[me @ linuxbox ~] $ printf "سطر:٪ 05d٪ 15.3f النتيجة:٪ + 15d \ n" 1071 3.14156295 32589
الخط: 01071 3.142 النتيجة: +32589
يوضح هذا تأثير الحد الأدنى لعرض الحقل على تباعد الحقول. أو ماذا عن تنسيق صفحة ويب صغيرة:
[me @ linuxbox ~] $ printf " \ n \ t \ n \ t \ t ٪س \ن
\ t \ n \ t \ n \ t \ t ٪س \ n \ t \ن \ n "" Page Tit le "" Page Content "
عنوان الصفحة
محتوى الصفحة
[me @ linuxbox ~] $ printf " \ n \ t \ n \ t \ t ٪س \ن
\ t \ n \ t \ n \ t \ t ٪س \ n \ t \ن \ n "" Page Tit le "" Page Content "
عنوان الصفحة
محتوى الصفحة