לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > מערכות הפעלה
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #9  
ישן 24-12-2009, 18:53
צלמית המשתמש של המממ
  המממ המממ אינו מחובר  
 
חבר מתאריך: 30.10.01
הודעות: 8,699
Follow me...
אנסה להסביר
בתגובה להודעה מספר 8 שנכתבה על ידי בזוקה שמתחילה ב "תודה-רבה! עובד מצויין. תוכל להסביר לי את הפקודה?"

ראשית, השתמשתי בפקודה בשם awk שמבצעת פעולות על קבצים שורה אחרי שורה (בדומה ל sed או grep) וכל שורה בה מוחלקת לאיברים על פי ההגדרה של המפריד
בברירת המחדל המפריד הוא כל תו לבן (whitespace) ז"א רווחים, טאבים וכיו"ב
כל איבר נכנס למשתנה מספרי $1,$2 עד $NF
כאשר המשתנה המיוחד $0 מכיל את השורה כולה.

שנית, חילקתי את הטיפול בקובץ לשני מקרים - כאלה שמכילים את הצירוף "AB" וכאלה שאינם מכילים אותו
לצורך כך נעזרתי בתחביר מעט לא ידוע של awk שמזכיר את התאמת המחרוזות בperl
קוד PHP:
 $"AB" 

במקרה זה, התנאי יתקיים אם AB מוכלת בתוך המשתנה $0
ואז יבוצע הקוד שבסוגריים המסולסלות עבור השורה

התנאי השני הוא הפוך (שים לב לסימן הקריאה שמשמעותו NOT)

הקוד שבסוגריים המסולסלות כולל פקודת הדפסה "print" שיש לה תחביר דומה ל"echo" המוכר משפות ה shell השונות.
אבל בawk מותר להשתמש גם ב printf בדיוק באותו אופן שבו היא מוגדרת בשפת C
כלומר שעל מנת להדפיס משתנה מחרוזת (האיבר הראשון למשל) משורשר למחרוזת קבועה ניתן לכתוב:
קוד PHP:
 printf("XYZ-%s\n",$1); 

הסימן "נקודה פסיק" מפריד בין פקודות בדיוק כמו ב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.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 25-12-2009, 11:05
צלמית המשתמש של המממ
  המממ המממ אינו מחובר  
 
חבר מתאריך: 30.10.01
הודעות: 8,699
Follow me...
אין בעד מה
בתגובה להודעה מספר 10 שנכתבה על ידי בזוקה שמתחילה ב "תודה-תודה-תודה!!!"

אבל עכשיו אני מרגיש לא נעים
ואני חייב להסביר את עקרון ה RTFM ומתי משתמשים בו.

בקיצור, RTFM מיועד לשלוח מישהו לעיין בהוראות כאשר ברור שהוא כלל לא טרח לבדוק
משום שהפתרון הוא שימוש פשוט בפקודה וייתכן שאף מופיע בסעיף הדוגמאות של ההוראות.

למשל, אם מישהו ישאל: איך אני מוצא שורות שמכילות "AB" בתוך קובץ
התשובה המתבקשת היא: grep

במקרים מורכבים יותר, כדאי להפנות למקורות מידע מפורטים ברשת או בספרות (למשל, הספר Unix in a nutshell של או'ריילי שמכסה בקיצור את רוב הפונקציות של sed ו awk)
או ממש לתת פתרון בקוד.

אגב, אם אתה צריך לעשות הרבה מניפולציות על טקסטים כמו שהצגת
אולי כדאי לך ללמוד קצת perl
השפה הזו נכתבה על ידי מישהו שנמאס לו לנסות להכריח את sed ו awk לעשות את מה שהוא רוצה
היא די קלה ונוחה לשימוש ויש לה הרבה ספרות ותמיכה ברשת.
_____________________________________
_________________________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
אזהרה: משרד הבריאות קובע כי העישון מזיק לבריאות !
תראו, אפילו החייזר נהיה ירוק מזה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 17:34

הדף נוצר ב 0.06 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר