Bash Tips
984 subscribers
14 photos
4 files
45 links
רוצים להשתמש בלינוקס אבל לא ממש מכירים את הכלים שהיא מספקת לעבודה?

בערוץ הבא תמצאו אוסף טיפים שימושיים ב-Bash והכרות עם כלים שונים שעשויים לחסוך מאמץ ועבודה בכתיבת סקריפטים ומימוש אוטומציות.
Download Telegram
להשוות ולפלטר comm
רמת קושי: #advanced

פקודת comm הינה קיצור של compare, פקודה להשוואת רשימות, זה יכול להיות שורות תוכן מקבצים או לפלט של פקודה זאת או אחרת, שימוש הפקודה על קבצים הוא די פשוט קריאה לפקודה ושני הקבצים להשוואה, במידה ונרצה להשוות פלט של פקודה נוכל להשתמש <() כפי שראינו בעבר עם פקודת diff

$ comm file1 file2
$ comm <(ls olddir/) <(ls newdir/)

מה זה השטויות הללו זה מקולקל
הפלט שנקבל יראה מעט כמו בלגן במבט ראשון, רשימה ארוכה של טקסט מוזח ימינה ושמאלה, אם נתבונן טוב נוכל בעצם לראות שאלו 3 רמות של הזחה.
הפקודה מחזירה בעצם 3 סוגי רמות כנגד 3 סוגי פלט, כשכל רמה מוזחת על ידי טאב
טאב 0. התוכן יחודי שקיים רק בקובץ 1
טאב 1. תוכן יחודי שקיים רק בקובץ 2
טאב 2. תוכן שנמצא בשני הקבצים יחד

$ touch old/{01..10}
$ touch new/{01..11..2}
$ comm <(ls old) <(ls new)
01
02
03
04
05
06
07
08
09
10
11


מה בעצם מיוחד בפקודה הזאת? הטריק העיקרי שמביאה איתה פקודת comm הוא שאפשר לפלטר את העמודות על ידי קריאה לפקודה עם פרמטרים אלו עמודות לא להציג, יש לנו 3 עמודות אז בשביל לקבל רק את התוכן של העמודה הימנית פשוט נסיר את עמודות 2 ו 3

$ comm -23 <(ls old/ | sort) <(ls new/ | sort)
02
04
06
08

או שאולי נרצה רק את שמות הקבצים שחופפים בשני התיקיות

$ comm -12 <(ls old/ | sort) <(ls new/ | sort)
01
03
05
07

כפי שאולי שמתם לב לפני שהעברתי את התוכן להשוואה אני מעביר אותו דרך sort וזאת נקודה חשובה. בלי שהשורות יהיו חופפות מבחינת המיקום בתוכן, פקודת comm לא תייצר השוואה נכונה.
(ונכון מספרים זאת לא הדוגמה הכי מוצלחת להדגים sort 😌)

#comm
#diff

@bash_tips