24-12-2009, 18:53
|
|
|
|
חבר מתאריך: 30.10.01
הודעות: 8,699
|
|
|
אנסה להסביר
בתגובה להודעה מספר 8 שנכתבה על ידי בזוקה שמתחילה ב "תודה-רבה! עובד מצויין. תוכל להסביר לי את הפקודה?"
ראשית, השתמשתי בפקודה בשם awk שמבצעת פעולות על קבצים שורה אחרי שורה (בדומה ל sed או grep) וכל שורה בה מוחלקת לאיברים על פי ההגדרה של המפריד
בברירת המחדל המפריד הוא כל תו לבן (whitespace) ז"א רווחים, טאבים וכיו"ב
כל איבר נכנס למשתנה מספרי $1,$2 עד $NF
כאשר המשתנה המיוחד $0 מכיל את השורה כולה.
שנית, חילקתי את הטיפול בקובץ לשני מקרים - כאלה שמכילים את הצירוף "AB" וכאלה שאינם מכילים אותו
לצורך כך נעזרתי בתחביר מעט לא ידוע של awk שמזכיר את התאמת המחרוזות בperl
במקרה זה, התנאי יתקיים אם AB מוכלת בתוך המשתנה $0
ואז יבוצע הקוד שבסוגריים המסולסלות עבור השורה
התנאי השני הוא הפוך (שים לב לסימן הקריאה שמשמעותו NOT)
הקוד שבסוגריים המסולסלות כולל פקודת הדפסה "print" שיש לה תחביר דומה ל"echo" המוכר משפות ה shell השונות.
אבל בawk מותר להשתמש גם ב printf בדיוק באותו אופן שבו היא מוגדרת בשפת C
כלומר שעל מנת להדפיס משתנה מחרוזת (האיבר הראשון למשל) משורשר למחרוזת קבועה ניתן לכתוב:
הסימן "נקודה פסיק" מפריד בין פקודות בדיוק כמו בC או ב bash
והצירוף n\ משמש למעבר שורה (בפקודה print מעבר השורה מתווסף אוטומטית)
ולסיום, השתמשתי בצמד פקודות חיפוש (index) והחלפה (substr) על מנת למצוא את תחילת הרצף "AB" בשורה כולה ($0) ולהדפיס מתוכה את ששת התווים שכוללים את האותיות והמספרים המבוקשים:
קוד PHP:
substr($0,index($0,"AB"),6)
ומכאן לשאלתך - ניתן לצרף את שתי הדוגמאות האחרונות ולקבל:
קוד PHP:
printf("XYZ-%s\n",substr($0,index($0,"AB"),6));
*עריכה*
מתוך man awk להלן הגדרות הפקודות השונות שבדוגמה:
index( String1, String2 )
Returns the position, numbering from 1, within the string specified by the String1 parameter where the string specified by the String2
parameter occurs. If the String2 parameter does not occur in the String1 parameter, a 0 (zero) is returned.
substr( String, M, [ N ] )
Returns a substring with the number of characters specified by the N parameter. The substring is taken from the string specified by the String
parameter, starting with the character in the position specified by the M parameter. The M parameter is specified with the first character in
the String parameter as number 1. If the N parameter is not specified, the length of the substring will be from the position specified by the M
parameter until the end of the String parameter.
עבור התחביר המלא של printf בצע man printf
_____________________________________
_________________________________________________
אזהרה: משרד הבריאות קובע כי העישון מזיק לבריאות !
תראו, אפילו החייזר נהיה ירוק מזה
נערך לאחרונה ע"י המממ בתאריך 24-12-2009 בשעה 19:02.
|