עזרה | bash scripting - לינוקס, Mac ומערכות הפעלה אחרות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה | bash scripting


Recommended Posts

שלום לכולם , יש לי קובץ csv שמסודר בצורה כללית לפי עמודות שמופרדות עם פסיקים לדוגמא:

name,id,phone

sigi,555,76575

fil,7654,765

gil,7654,7685

(לקובץ שלי קוראים sqlBash.sh)

הרעיון הוא שאני אוכל להוסיף להציג ולערוך

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

"sqlBash.sh select from "book.csv" where "id=x/

יוצג לי כל השורות שמופיע בהם ID = X

כנל גם למחיקה (צריך לתמוך ב: =,<,>)

התחלתי להשתמש ב grep אבל אני לא יודע איך לנתב את עצמי לפי השדות הרצויים

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

אבל זה רק בגלל ש grep עושה חיפוש כללי ומציג לי אותם.

אני מעוניין למקד את זה לרמה שאם אני כותב את הקוד שלמעלה הוא יחפש לי רק באזור של ה ID למשל

את ההצגה שלו אני כנראה יעשה ב cat

ישמח להצעות :nixweiss:

קישור לתוכן
שתף באתרים אחרים

אני לא רוצה ממשק SQL

באופן כללי אני בודק את התוים שהגיעו מהמשתמש ע"י $ כאשר כל תו מנותב לפונקציה אחרת

זה מאוד שיטתי אבל גם לא הכי מסובך

בכללי אני צריך לחפש את הערך עפ"י המיקום הספציפי :hat:

קישור לתוכן
שתף באתרים אחרים

אני אוהב BASH אך אין כמו PERL בשביל פעולות כאלו.

יצרתי קובץ בשם pr.txt עם הנתונים כפי שרשמת בהודעה שלך.

אפשר להריץ את הסקריפט, למשל:

./pr.pl id

זה יציג לך את הכותרת ואת כל הנתונים של אותה עמודה.

אני בטוח שאפשר לעשות זאת ב BASH אך מפני שאני מכיר PERL זה נראה כמו עבודה מסורבלת ל BASH.

#!/usr/bin/perl -w
use strict;
die "no arguments supplied" unless @ARGV; # נבדוק אם סיפקנו ערך לחפש בהרצת התוכנה, אחרת נסיים

# נזרוק כל שורה של הקובץ לתוך מערך
open (SFILE, "pr.txt") || die "Error opening file: $! \n";
my @lines = <SFILE>;
close SFILE;

my $temp;
my @vals;
my @header = split (/,/, $lines[0]); # נזרוק לתוך מערך את השורה הראשונה - ה"קטגוריות" - נשבור את השורה: כל ערך מופרד ע"י פסיק
for my $i (0..$#header){ # נריץ לופ על המערך החדש, בכל פעם אנחנו עוברים ערך ("קטגוריה") מתוך השורה
chomp ($header[$i]); # ניקיון
if ($header[$i] eq $ARGV[0]){ # אם הערך שאנחנו עוברים כרגע שווה לערך שסופק בהרצת התוכנה,
$temp = $i; # capture the colum's number into $temp # נלכוד את הערך של העמודה לתוך משתנה חדש
print $header[$temp] . "\n"; # נדפיס לפלט את הערך שמצאנו
}
}

for my $i (1..$#lines){ # לופ חדש, מתחיל ב 1, כי 0 היה בשביל השורה של ה"קטגוריות"
@vals = split (/,/, $lines[$i]); # נזרוק לתוך מערך את הערכים ע"פ הפרדה של פסיק
for my $j (0..$#vals){ # נריץ לופ על המערך החדש
chomp ($vals[$j]); # ניקיון
if ($j == $temp){ ## כאן אני משווה את הערך שלכדנו מקודם לעמודה שאנחנו בודקים בלופ הזה, אם יש התאמה, נדפיס לפלט
print $vals[$j];
}
}
print "\n"; # שורה חדשה
}

קישור לתוכן
שתף באתרים אחרים

תודה על ההודעה המושקעת אני מעריך את זה :)

התחלתי עם זה בבאש עכשיו

איך אני יכול לקחת מחרוזת ולפרק אותה לשלושה מחרוזת לפי הצרכים שלי

לדוגמא : name=gil

אני רוצה את סוג האופרטור את העמודה המבוקשת ואת השם הרצוי

זה הצעד הבא ידידי :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...