m1ke פורסם 2010 באוקטובר 28 Share פורסם 2010 באוקטובר 28 אהלן,יש לי קובץ HTML די מסובך של דף סטאטוס של tomcat. אני רוצה להוציא סטרינג מאוד מסויים ממנו לצרוך ניטור (מספר הטראדים הפעילים).אם זה היה בvbscript הייתי פשוט מכין מחרוזת regex בסגנון של:busy thread count: ([0-9])ואז מבקש לקבל רק את ה occurrence ה-1 (כלומר המספר עצמו).אני יודע שב sed למשל אני יכול לבטא את זה בעזרת \1 אבל אני רוצה להדפיס רק את הספרה, ולא את כל השורה המכילה את השורה...בקיצור הנה דוגמא לחלק מהHTML:<h1>JVM</h1><p> Free memory: 158.63 MB Total memory: 1021.50 MB Max memory: 1021.50 MB</p><h1>jk-172.16.1.16-8009</h1><p> Max threads: 200 Current thread count: 4 Current thread busy: 1<br> Max processing time: 0 ms Processing time: 0.0 s Request count: 0 Error count: 0 Bytes received: 0.00 MB Bytes sent: 0.00 MB</p><table border="0"><tr><th>Stage</th><th>Time</th><th>B Sent</th><th>B Recv</th><th>Client</th><th>VHost</th><th>Request</th></tr></table><p>P: Parse and prepare request S: Service F: Finishing R: Ready K: Keepalive</p><h1>http-172.16.1.16-8080</h1><p> Max threads: 300 Current thread count: 300 Current thread busy: 234<br> Max processing time: 186422 ms Processing time: 4855021.0 s Request count: 53299920 Error count: 117878 Bytes received: 46206.53 MB Bytes sent: 2049.89 MB</p><table border="0"><tr><th>Stage</th><th>Time</th><th>B Sent</th><th>B אני רוצה לקבל חזרה רק 234. הכל דרך cli באובונטו.רעיונות? קישור לתוכן שתף באתרים אחרים More sharing options...
6652fnuriel77 פורסם 2010 באוקטובר 29 Share פורסם 2010 באוקטובר 29 אני ארשום לך כמה אופציות.אני יכול לעשות את זה יותר פשוט, אבל השאלה הכללית היא עד כמה דינמית השורה הזו (עד כמה היא עלולה להשתנות).תבדוק את הדברים שעשיתי פה במצבים שונים לראות אם זה תמיד "תופס":דוגמא א' (יוציא את ה 243 משתמש ב BUSY השני בכדי למצוא את המחרוזת)sed 's/\ /\t/g'|sed 's/\t/\n/g' | sed -n '/busy/{n;p;}'|tail -n 1 | sed 's/<.*//g'אם השורה הזו למשל נמצאת בקובץ myfile אתה עושה לפני כל השורה שלמעלה את :cat myfile | ואז מוסיף את מה שרשמתי.דוגמא ב' sed 's/[a-zA-Z]\n/g' | sed -n '/bus/{n;p;}' | tail -n 1 | sed 's/<.*//g'אותו העקרון, אני הלכתי על הדרך בה אני קודם מפרק את השורה האחת שלך לכמה שורות ואחרי זה כמה פקודות SED להוציא את הערך הרצוי.דוגמא ג' בעזרת AWK:awk {'print $73'} | sed 's/<.*//g'רק צריך לשים לב שעם ה AWK שעשיתי זה הולך לפי רווחים וסופר עד הערך ב 73, אז אם הפורמט של השורה הזו משתנה, ה 73 שציינתי ב AWK לא יתאים לערך אותו אתה מחפשנ.ב זה יעבוד לא רק באובונטומקוה שעזרתי...בהצלחה! קישור לתוכן שתף באתרים אחרים More sharing options...
m1ke פורסם 2010 באוקטובר 29 מחבר Share פורסם 2010 באוקטובר 29 תודה נוריאל, אנסה את כולן ואנסה להבין איך אתה בונה את הparsing. רק חלק מהדגלים פה מוכר לי. (פרט לדוגמא האחרונה אבל גיליתי שזה לא התאים כי הדף דינאמי מדי). קישור לתוכן שתף באתרים אחרים More sharing options...
6652fnuriel77 פורסם 2010 באוקטובר 29 Share פורסם 2010 באוקטובר 29 תודה נוריאל, אנסה את כולן ואנסה להבין איך אתה בונה את הparsing. רק חלק מהדגלים פה מוכר לי. (פרט לדוגמא האחרונה אבל גיליתי שזה לא התאים כי הדף דינאמי מדי). סבבה, מכיוון שאתה גם מעוניין להבין מה עשיתי שם (אני מאמין שיש דרכים "מתומצתות" יותר) בשביל הטכניקה שהשתמשתי, הצטרכתי לפרק את השורה הארוכה הזו לכמה שורות, זאת עשיתי למשל בדוגמא ב' ע"י 's/[a-zA-Z]\n/g' שאומר חפש כל אות (גדולה\קטנה) שאחריה מופיעות נקודותיים והחלף את אילו בשורה חדשה (n\). אחרי זה אני מחפש את הערך busy או bus מכיוון שמופיע פעמיים אני עושה tail -n 1 כי הערך הרצוי מופיע אחרון. אחרי זה תוספת sed "לנקות" את ה <br> ... קישור לתוכן שתף באתרים אחרים More sharing options...
m1ke פורסם 2010 באוקטובר 30 מחבר Share פורסם 2010 באוקטובר 30 חזק!מנסיונך מתי SED ומתי AWK? קישור לתוכן שתף באתרים אחרים More sharing options...
6652fnuriel77 פורסם 2010 באוקטובר 30 Share פורסם 2010 באוקטובר 30 א. תלוי באיזה סינטקס אתה שולט יותר בשביל לבצע את מה שאתה צריך, בכל אופן גם לא רע לשלב sed ו awk באותה השורה \ סקריפט.ב. לגבי מהירות עבודה, אני לא יודע מי מהם מהיר יותר, תריץ את הסקירפט שלך עם time לפני שם הסקריפט לראות כמה זמן, כך תוכל להשוות.ויש לך את perl מה cmd:perl -pe "/busy:[ ][0-9]{2,5}/; print \"Threads $&\n\";" myfile.html | head -n 1אתה יכול לקרוא לזה מתוך סקריפט bash לדוגמא, מה שנחמד שהערך עצמו נכנס לתוך אחד המשתנים הדיפולטיים של perl ואתה יכול לעשות איתו הכל.Perl אידיאלית ל text parsing קישור לתוכן שתף באתרים אחרים More sharing options...
m1ke פורסם 2010 בנובמבר 1 מחבר Share פורסם 2010 בנובמבר 1 תודה נוריאל עזרת לי מאוד. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.