כיצד להשתמש בפקודה awk בלינוקס

Fatmawati Achmad Zaenuri/Shutterstock



בלינוקס, |_+_| הוא דינמו למניפולציה של טקסט בשורת הפקודה, כמו גם שפת סקריפטים רבת עוצמה. הנה הקדמה לכמה מהתכונות המגניבות ביותר שלו.

קָשׁוּר: 10 פקודות לינוקס בסיסיות למתחילים





איך awk קיבל את השם שלו

ה- |_+_| הפקודה נקראה באמצעות ראשי התיבות של שלושת האנשים שכתבו את הגרסה המקורית ב-1977: אלפרד אהו , פיטר וינברגר , ו בריאן קרניגאן . שלושת האנשים האלה היו מהאגדי AT&T מעבדות בל פנתיאון יוניקס. עם תרומותיהם של רבים אחרים מאז, |_+_| המשיכה להתפתח.

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



כללים, דפוסים ופעולות

|_+_| עובד על תוכניות המכילות כללים המורכבים מתבניות ופעולות. הפעולה מבוצעת על הטקסט התואם לתבנית. הדפוסים מוקפים בסוגרים מסולסלים (|_+_|). ביחד, דפוס ופעולה יוצרים כלל. כל |_+_| התוכנית מוקפת במרכאות בודדות (|_+_|).

בואו נסתכל על הסוג הפשוט ביותר של |_+_| תכנית. אין לו דפוס, ולכן הוא מתאים לכל שורת טקסט המוזנת לתוכו. המשמעות היא שהפעולה מבוצעת בכל שורה. נו השתמש בו על הפלט מ את |_+_| פקודה.

הנה הפלט הסטנדרטי מ-|_+_|:



awk

פרסומת

אולי אנחנו לא צריכים את כל המידע הזה, אלא, רק רוצים לראות את השמות בחשבונות. אנחנו יכולים לצרף את הפלט מ-|_+_| לתוך |_+_|, ואז אמור |_+_| כדי להדפיס רק את השדה הראשון.

כברירת מחדל, |_+_| מחשיב שדה כמחרוזת של תווים מוקפת ברווח לבן, תחילת שורה או סוף שורה. שדות מזוהים באמצעות סימן דולר (|_+_|) ומספר. אז, |_+_| מייצג את השדה הראשון, שבו נשתמש עם ה- |_+_| פעולה להדפסת השדה הראשון.

אנו מקלידים את הדברים הבאים:

awk

|_+_| מדפיס את השדה הראשון ומבטל את שאר השורה.

אנחנו יכולים להדפיס כמה שדות שנרצה. אם נוסיף פסיק כמפריד, |_+_| מדפיס רווח בין כל שדה.

אנו מקלידים את הדברים הבאים כדי להדפיס גם את הזמן שבו האדם נכנס (שדה רביעי):

awk

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

    0 דולר: מייצג את כל שורת הטקסט. 1 דולר: מייצג את השדה הראשון. 2 דולר: מייצג את השדה השני. 7 דולר: מייצג את השדה השביעי. 45 דולר: מייצג את השדה ה-45. $NF: מייצג את מספר השדות, ומייצג את השדה האחרון.
פרסומת

נקליד את הדברים הבאים כדי להעלות קובץ טקסט קטן המכיל ציטוט קצר המיוחס אליו דניס ריצ'י :

awk

אנחנו רוצים |_+_| כדי להדפיס את השדה הראשון, השני והאחרון של הצעת המחיר. שימו לב שלמרות שהוא עטוף בחלון המסוף, זוהי רק שורת טקסט בודדת.

אנו מקלידים את הפקודה הבאה:

awk

אנחנו לא מכירים את הפשטות הזו. הוא השדה ה-18 בשורת הטקסט, ולא אכפת לנו. מה שאנחנו כן יודעים זה שזה השדה האחרון, ואנחנו יכולים להשתמש ב-|_+_| כדי לקבל את ערכו. התקופה פשוט נחשבת לעוד דמות בגוף התחום.

הוספת מפרידי שדות פלט

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

{} awk

נשתמש ב-|_+_| (מפריד שדה פלט) משתנה כדי לשים מפריד בין החודש, היום והשנה. שים לב שלמטה אנו מקיפים את הפקודה במירכאות בודדות (|_+_|), לא בסוגריים מסולסלים (|_+_|):

' awk

כללי ההתחלה והסיום

א |_+_| הכלל מבוצע פעם אחת לפני שמתחיל עיבוד טקסט כלשהו. למעשה, זה מבוצע לפני |_+_| אפילו קורא כל טקסט. An |_+_| הכלל מבוצע לאחר השלמת כל העיבוד. אתה יכול לקבל מספר |_+_| וכן |_+_| כללים, והם יבוצעו לפי הסדר.

פרסומת

לדוגמה שלנו של |_+_| כלל, נדפיס את כל הציטוט מהכתובת |_+_| קובץ שהשתמשנו בו בעבר עם כותרת מעליו.

לשם כך, נקליד את הפקודה הבאה:

who

שימו לב ל-|_+_| לכלל יש סט פעולות משלו המוקף בתוך סט משלו של סוגרים מסולסלים (|_+_|).

אנחנו יכולים להשתמש באותה טכניקה עם הפקודה שהשתמשנו בה בעבר כדי לספק פלט מ-|_+_| לתוך |_+_|. לשם כך, נקליד את הדברים הבאים:

who

מפרידי שדות קלט

אם אתה רוצה |_+_| כדי לעבוד עם טקסט שאינו משתמש ברווח לבן כדי להפריד בין שדות, עליך לומר לו באיזה תו הטקסט משתמש כמפריד השדות. לדוגמה, ה- |_+_| הקובץ משתמש בנקודתיים (|_+_|) כדי להפריד בין שדות.

נשתמש בקובץ הזה וב-|_+_| (מחרוזת מפריד) אפשרות לספר |_+_| להשתמש בנקודתיים (|_+_|) כמפריד. אנו מקלידים את הדברים הבאים כדי לומר |_+_| כדי להדפיס את שם חשבון המשתמש ואת תיקיית הבית:

who

הפלט מכיל את שם חשבון המשתמש (או שם האפליקציה או הדמון) ואת תיקיית הבית (או מיקום האפליקציה).

הוספת דפוסים

אם כל מה שאנחנו מעוניינים בו הם חשבונות משתמש רגילים, נוכל לכלול דפוס עם פעולת ההדפסה שלנו כדי לסנן את כל הערכים האחרים. כי תעודת זהות של המשתמש מספרים שווים או גדולים מ-1,000, נוכל לבסס את המסנן שלנו על המידע הזה.

פרסומת

אנו מקלידים את הדברים הבאים כדי לבצע את פעולת ההדפסה שלנו רק כאשר השדה השלישי (|_+_|) מכיל ערך של 1,000 או יותר:

awk

הדפוס צריך להקדים מיד את הפעולה שאליה הוא משויך.

אנחנו יכולים להשתמש ב-|_+_| כלל לספק כותרת לדוח הקטן שלנו. אנו מקלידים את הדברים הבאים, תוך שימוש בסימון (|_+_|) כדי להוסיף תו חדש למחרוזת הכותרת:

awk

דפוסים הם מן המניין ביטויים רגולריים , והם אחת התהילות של |_+_|.

נניח שאנו רוצים לראות את המזהים הייחודיים האוניברסליים (UUIDs) של מערכות הקבצים המותקנות. אם נחפש דרך |_+_| קובץ עבור מופעים של המחרוזת UUID, הוא אמור להחזיר את המידע הזה עבורנו.

אנו משתמשים בדפוס החיפוש /UUID/ בפקודה שלנו:

awk

פרסומת

הוא מוצא את כל המופעים של UUID ומדפיס את השורות הללו. למעשה היינו מקבלים את אותה תוצאה ללא ה-|_+_| פעולה מכיוון שפעולת ברירת המחדל מדפיסה את כל שורת הטקסט. עם זאת, למען הבהירות, לעתים קרובות שימושי להיות מפורש. כשאתה מסתכל בסקריפט או בקובץ ההיסטוריה שלך, אתה תשמח שהשארת רמזים לעצמך.

השורה הראשונה שנמצאה הייתה שורת הערות, ולמרות שהמחרוזת UUID נמצאת באמצע שלה, |_+_| עדיין מצא את זה. אנחנו יכולים לשנות את הביטוי הרגולרי ולומר |_+_| לעבד רק שורות שמתחילות ב-UUID. לשם כך, אנו מקלידים את הדברים הבאים הכוללים את אסימון תחילת השורה (|_+_|):

$

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

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

פונקציות מובנות

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

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

printפרסומת

פקודה זו מדפיסה את הארקטנג'נט של 0 (אפס) ו-1 (שזה במקרה הקבוע המתמטי, pi):

awk

בפקודה הבאה, אנו משנים את התוצאה של |_+_| פונקציה לפני שאנו מדפיסים אותה:

awk

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

awk

awk סקריפטים

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

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

  • אמור למעטפת באיזה קובץ הפעלה להשתמש כדי להפעיל את הסקריפט.
  • הכן |_+_| להשתמש ב-|_+_| משתנה מפריד שדות לקריאת טקסט קלט עם שדות מופרדים בנקודתיים (|_+_|).
  • השתמש ב-|_+_| מפריד שדות פלט כדי לומר |_+_| להשתמש בנקודתיים (|_+_|) כדי להפריד בין שדות בפלט.
  • הגדר מונה ל-0 (אפס).
  • הגדר את השדה השני של כל שורת טקסט לערך ריק (זה תמיד x, אז אנחנו לא צריכים לראות אותו).
  • הדפס את השורה עם השדה השני שהשתנה.
  • הגדל את המונה.
  • הדפס את ערך המונה.

התסריט שלנו מוצג למטה.

דוגמה לתסריט מוזר בעורך.

ה- |_+_| הכלל מבצע את שלבי ההכנה, בעוד ש-|_+_| כלל מציג את ערך המונה. הכלל האמצעי (שאין לו שם, וגם לא דפוס כך שהוא מתאים לכל שורה) משנה את השדה השני, מדפיס את השורה ומגדיל את המונה.

פרסומת

השורה הראשונה של הסקריפט אומרת למעטפת באיזה קובץ הפעלה להשתמש (|_+_|, בדוגמה שלנו) כדי להפעיל את הסקריפט. זה גם עובר את |_+_| (שם קובץ) ל-|_+_|, מה שמודיע לו שהטקסט שהוא הולך לעבד יגיע מקובץ. נעביר את שם הקובץ לסקריפט כשנריץ אותו.

כללנו את הסקריפט למטה כטקסט כדי שתוכל לגזור ולהדביק:

$NF

שמור את זה בקובץ בשם |_+_|. ל להפוך את הסקריפט לביצוע ו , אנו מקלידים את הדברים הבאים באמצעות |_+_|:

awk

כעת, נריץ אותו ונעביר את ה-|_+_| קובץ לתסריט. זה הקובץ |_+_| יעבד עבורנו, באמצעות הכללים שבתסריט:

date

הקובץ מעובד וכל שורה מוצגת, כפי שמוצג להלן.

פרסומת

הערכים x בשדה השני הוסרו, אך שימו לב שמפרידי השדות עדיין קיימים. השורות נספרים והסך הכל ניתן בתחתית הפלט.

awk לא עומד על Awkward

|_+_| לא עומד על מביך; זה מייצג אלגנטיות. זה תואר כמסנן עיבוד וככותב דוחות. ליתר דיוק, זה שני אלה, או, ליתר דיוק, כלי שאתה יכול להשתמש בו עבור שתי המשימות הללו. בכמה שורות בלבד, |_+_| משיג את מה שדורש קידוד נרחב בשפה מסורתית.

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

פקודות לינוקס
קבצים זֶפֶת · pv · חתול · טק · chmod · אחיזה · הבדל · sed · עם · איש · דחף · popd · fsck · testdisk · seq · fd · פנדוק · CD · $PATH · מביך · לְהִצְטַרֵף · jq · לְקַפֵּל · ייחודי · journalctl · זָנָב · מדינה · ls · fstab · זרק · פָּחוּת · chgrp · chown · לְהַאִיץ · תראה · מחרוזות · סוּג · לשנות שם · רוכסן · לִפְתוֹחַ · הר · umount · להתקין · fdisk · mkfs · rm · rmdir · rsync · df · gpg · אָנוּ · ננו · mkdir · מ · ב · תיקון · להמיר · rclone · שמץ · SRM
תהליכים כינוי · מָסָך · חלק עליון · נֶחְמָד · נחמדים · התקדמות · רצועה · מערכת · tmux · chsh · הִיסטוֹרִיָה · בְּ- · קבוצה · חינם · איזה · dmesg · usermod · נ.ב · chroot · xargs · tty · זרת · lsof · vmstat · פסק זמן · קִיר · כן · לַהֲרוֹג · לִישׁוֹן · סודו · שֶׁלוֹ · זְמַן · הוספה קבוצתית · usermod · קבוצות · לשוו · לכבות · לְאַתחֵל · תפסיק · כיבוי · passwd · lscpu · crontab · תַאֲרִיך · bg · fg
רשת netstat · פינג · traceroute · ip · ss · מי זה · fail2ban · bmon · אתה · אֶצבַּע · nmap · ftp · סִלְסוּל · wget · מי · מי אני · ב · iptables · ssh-keygen · ufw

קָשׁוּר: מחשבי Linux הטובים ביותר למפתחים וחובבי

קרא את הבא תמונת פרופיל עבור דייב מקיי דייב מקיי
דייב מקיי השתמש לראשונה במחשבים כשסרט נייר מחורר היה באופנה, ומאז הוא מתכנת. לאחר למעלה מ-30 שנה בתעשיית ה-IT, הוא כעת עיתונאי טכנולוגיה במשרה מלאה. במהלך הקריירה שלו, הוא עבד כמתכנת עצמאי, מנהל צוות פיתוח תוכנה בינלאומי, מנהל פרויקטים של שירותי IT, ולאחרונה כמנהל הגנת מידע. הכתיבה שלו פורסמה על ידי howtogeek.com, cloudsavvyit.com, itenterpriser.com ו-opensource.com. דייב הוא אוונגליסט של לינוקס ותומך בקוד פתוח.
קרא את הביוגרפיה המלאה

מאמרים מעניינים