NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
HE

פקודות לינוקס ומיומנויות מעטפת

awk: כאשר עמודות הופכות לתוכניות

awk הוא מה שאתה מגיע אליו כאשר עמודות הופכות ליחידת העבודה: יומני גישה של nginx, /etc/passwd, פלט df, כל דבר שחי בשדות. זוהי שפה שלמה (משתנים, מערכים, חשבון, כללי פעולה של דפוס) הלובשת בגדים של חוט-ליינר, שזה בדיוק המסווה המתאים לזיהוי פלילי של יומנים. הגבול הכנה: כל דבר ש-awk עושה בנוחות הוא one-liner, וכל מה שצריך עמוד של בלוקים הוא סקריפט Python שעדיין לא הודה בעצמו.

נקודות עיקריות

  • פיצול שדות הוא הטריק המרכזי: awk -F: '$3 >= 1000 {print $1}' /etc/passwd מפרט את המשתמשים האמיתיים, ו-F'[,|]' מטפל במפרידים מרובי תווים כאשר החתך כבר ויתר.
  • ספירה עם מערכים אסוציאטיביים: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure הופך כל יומן לטבלת תדירות בשורה אחת.
  • NR ו-NF עונים על שאלות קבצים: 'NR==1' היא שורת הכותרת, '{print NF}' סופרת עמודות בכל שורה, והשוואת NR לערכים השמורים של קובץ אחר מוצאת כפילויות ופערים.
  • תמצית התאמה פלוס היא הלחם היומי: awk '/ 500 / {print $7, $9}' access.log מושך דפי שגיאה עם כתובות URL, ו-OFS מאפשר לך להדפיס מחדש $0 לאחר עריכת שדה בודד מבלי לשכתב את השורה בעצמך.
  • בלוקים BEGIN ו-END הם המקום שבו חיים העבודה המצטברים: BEGIN מגדיר מפרידים, הכללים האמצעיים פועלים בכל שורה, END מדפיס סכומים; שלושה בלוקים נקראים בסדר, חמישה הוא תסריט לובש תחפושת.
  • ציטוט הוא האויב האמיתי של ה-shell one-liners: ציטוט בודד של התוכנית, מרכאות כפולות בתוכה, ותזכרו ש-7$ בתוך מחרוזת מעטפת במירכאות כפולות אף פעם לא מגיעות לאבק בכלל.
  • עבודה מספרית מקבלת LC_ALL=C: פסיקים מקומיים במספרים ובאיסוף אי זוגי הופכים השוואות ומיון הצידה, והצמדת המקום היא שורה אחת שחוסכת אחר צהריים.
  • הכר את התקרה: פסיקים במירכאות בתוך CSV, JSON מקוננות או פורמטים מרובים קוויים עוברים לפייתון; awk הוא אזמל ונשאר כזה.

הערת שטח

סרגל אחד מביך שסיכם עמודות דולרים מיומן עם פסיקים מקומיים יצר מספרים שאיש לא שאל עד שהחשבונאות פתחה את הדוח. LC_ALL=C עבר לספריית הכינוי שלנו באותו שבוע ונשאר.

שאלות נפוצות

awk או חתוך לעבודת עמודים?

חתך עבור מפריד אחד קבוע ורשימת עמודות רגילה; awk ברגע שהתנאים, הביטוי הרגולרי, החשבון או האגרגטים מופיעים, ובשלב זה החיתוך ממילא יצא מעומקו.

איך אני מסכם או ממוצע של עמודה?

צבירה ב-END: awk '{s += $5} END {print s, s/NR}' מוסיף ומבצע ממוצע של שדה חמש על פני קווים; הסר תחילה אלפי מפרידים אם אזור מכניס פסיקים למספרים.

מדוע awk one-liner שלי מתנהג אחרת ב-macOS?

macOS שולחת POSIX awk ללא הרחבות GNU כמו -i inplace או gensub; סקריפטים שפועלים על לינוקס יכולים להיכשל שם בשקט, אז שמרו על ספינות POSIX בצורת POSIX או קחו איתכם מבט.

האם awk יכול לנתח JSON?

לא בצורה משמעותית: ל-JSON אין מבנה עמודות awk מבין ופריצות רגקס נשברות על אובייקטים מקוננים. השתמש ב-jq, שהיא הצורה של awk עבור JSON, או במודול json של Python כאשר העבודה גדלה.

איך Kinetikatech מסייעת לך ב-פקודות לינוקס ומיומנויות מעטפת

בכנות, רוב הצוותים מגיעים אלינו אחרי שניסו לבד: הפקודות והרגלי הסקריפט שמחליטים אם מנהל מערכת מפעיל שרת או נלחם בו: חיפוש, טרנספורמציה, העברה ופיקוח על טקסט ותהליכים עם הכלים הקיימים בכל התקנה בסיסית. השירות אבטחת שרתי לינוקס וניהול שרתים שלנו קיים כדי שלא תלמדו פקודות לינוקס ומיומנויות מעטפת בדרך הקשה, ושלא תגלו את זה בשיחה בשש בבוקר.

דבר עם מהנדס

צריך עזרה בניהול שרתים?

צוות המומחים שלנו זמין 24/7 - זמן תגובה 30 דקות.

קבל עזרה support@kinetikatech.com