נקודה צפה
רמת קושי: #beginners
שאלה שנתקלתי בה בקבוצת לינוקס והתשובה הפתיעה מעט גם אותי, השאלה בתמצית היא איך אפשר בבאש לבצע חשבון עם ערך עשרוני?
בכדי לבצע פעולות אריתמטיות בבאש ניתן להשתמש בפקודת
מה קורה כשמנסים לקבל ערך עשרוני?
להפתעתנו נראה שלא משנה באיזה כלי נשתמש נראה שאי אפשר לקבל את השבר.
פקודת bc יודעת להחזיר ערך בעל נקודה צפה על ידי שימוש בדגל
את אותו רעיון ניתן לעשות כמובן עם כל אינטרפטר אחר שזמין במערכת כמו פייתון, php, node וכו'
עריכה: תודה לגולן על ההערה, הטריק הבא לא יעבוד בבאש אלא רק בזיש
#expr
#awk
#let
#bc
@bash_tips
רמת קושי: #beginners
שאלה שנתקלתי בה בקבוצת לינוקס והתשובה הפתיעה מעט גם אותי, השאלה בתמצית היא איך אפשר בבאש לבצע חשבון עם ערך עשרוני?
בכדי לבצע פעולות אריתמטיות בבאש ניתן להשתמש בפקודת
expr
, bc
, let
או לעטוף את הביטוי ב (())$
$ expr 5 + 4
9
$ let add=5+5 ; echo $add
10
$ echo $((5*3))
15
$ bc <<< '4 * 2'
8
אחלה עובד מעולהמה קורה כשמנסים לקבל ערך עשרוני?
להפתעתנו נראה שלא משנה באיזה כלי נשתמש נראה שאי אפשר לקבל את השבר.
$ let float=5/2 ; echo $float
2
$ expr 5 / 2
2
$ echo $((5/2))
2
$ bc <<< '5 / 2'
2
לינק ממש מעניין שהמשתמש עמיעד הביא מציג רשימה יפה של פתרונות, ניסיתי את מקצתם להלן אלו שמצאו חן בעיניי.פקודת bc יודעת להחזיר ערך בעל נקודה צפה על ידי שימוש בדגל
-l
רק שהיא מחזירה אותו בצורתו מלאה$ bc -l <<< 5/2בכדי לשלוט על אורך השבר שמוצג נוכל להגדיר זאת על ידי שימוש במשתנה
2.50000000000000000000
scale
.$ bc <<< "scale=2; 5/2"את ה
2.50
awk
אנו מכירים וכן הוא יודע חשבון$ awk "BEGIN {print 5/2}"ניתן ליצור מביטוי ההוק alias על ידי השמה של
2.5
$*
וכך להשתמש בו כפקודה לכל דבר.את אותו רעיון ניתן לעשות כמובן עם כל אינטרפטר אחר שזמין במערכת כמו פייתון, php, node וכו'
$ echo 'calc(){ awk "BEGIN { print $*}"; }' >> ~/.bashrc
$ calc 5/2
2.5
עריכה: תודה לגולן על ההערה, הטריק הבא לא יעבוד בבאש אלא רק בזיש
$ echo $((5.0/2))
2.5
בבאש נעשה זאת כך $ printf %.2f\\n $((5/2))#arithmetic_expression
2.50
#expr
#awk
#let
#bc
@bash_tips
לחלק נכון,
לא מעט פעמים אנו נדרשים לקבל פלט ולהוציא ממנו את החלק שרלוונטי אלינו, לצורך העניין הקלט שאנו מנסים לפרסר הוא זה, ואנו רוצים לקבל את העמודה השניה.
הפקודה שלנו תראה משהו כזה כשדגל -d מפצל לפי רווחים ו -f בוחר את מספר "העמודה"
מתי הפתרון הזה לא יעבוד לנו?
מה קורה למשל כשיש לנו פלט שכבר מחולק לעמודות ויש יותר מרווח בודד בין עמודה לעמודה
ננסה להיות פרקטים ולעבוד עם פלט מחיי היום יום
איך כן?
בכדי לפתור את הבעיה הזאת יהיה קל יותר להשתמש ב
אנו משתמשים בפונקציית print ומספר העמודה כדי להדפיס את העמודה הרצויה לנו
#cut
#awk
@bash_tips
awk
רמת קושי: #beginners לא מעט פעמים אנו נדרשים לקבל פלט ולהוציא ממנו את החלק שרלוונטי אלינו, לצורך העניין הקלט שאנו מנסים לפרסר הוא זה, ואנו רוצים לקבל את העמודה השניה.
$ cat output
one two three
one two three
one two three
הפתרון לבעיה הזאת הוא להשתמש ב cut
עליו דיברנו בעברהפקודה שלנו תראה משהו כזה כשדגל -d מפצל לפי רווחים ו -f בוחר את מספר "העמודה"
$ cat output | cut -d " " -f2
two
two
two
אחלה, עובד מעולהמתי הפתרון הזה לא יעבוד לנו?
מה קורה למשל כשיש לנו פלט שכבר מחולק לעמודות ויש יותר מרווח בודד בין עמודה לעמודה
ננסה להיות פרקטים ולעבוד עם פלט מחיי היום יום
docker ps | cut -d " " -f 2
במקום לקבל את הפלט של כל סוגי האימג'ים ששל הקונטיינרים מה שנקבל במקום זה את הרווח שלאחר מכןאיך כן?
בכדי לפתור את הבעיה הזאת יהיה קל יותר להשתמש ב
awk
כדי לפצל פלטdocker ps | awk '{print $2}'
החוקים הם אותו הדבר, רווח או מספר רווחים זה מה שמפצל בין "עמודות" הטקסטאנו משתמשים בפונקציית print ומספר העמודה כדי להדפיס את העמודה הרצויה לנו
#cut
#awk
@bash_tips
👍17🔥3🥰1