פורסם 2011 במרץ 914 שנים שלום לכולם , יש לי קובץ 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 ישמח להצעות
פורסם 2011 במרץ 914 שנים אתה חייב ממשק SQL? אם כן הדרך ההגיונית היחידה היא לייבא את הCSV לSQLLITE ולהמשיך משם.אם לא תראה אם SED מספיק לצרכיך, ובשלב הבא או AWK או PERL
פורסם 2011 במרץ 914 שנים מה התוכן של ה shell scipt שאתה מתמש בו?לבצע parsing מתוך CSV זה מאוד שיטתתי.
פורסם 2011 במרץ 914 שנים מחבר אני לא רוצה ממשק SQL באופן כללי אני בודק את התוים שהגיעו מהמשתמש ע"י $ כאשר כל תו מנותב לפונקציה אחרת זה מאוד שיטתי אבל גם לא הכי מסובך בכללי אני צריך לחפש את הערך עפ"י המיקום הספציפי
פורסם 2011 במרץ 1014 שנים אני אוהב BASH אך אין כמו PERL בשביל פעולות כאלו.יצרתי קובץ בשם pr.txt עם הנתונים כפי שרשמת בהודעה שלך.אפשר להריץ את הסקריפט, למשל:./pr.pl idזה יציג לך את הכותרת ואת כל הנתונים של אותה עמודה.אני בטוח שאפשר לעשות זאת ב BASH אך מפני שאני מכיר PERL זה נראה כמו עבודה מסורבלת ל BASH.#!/usr/bin/perl -wuse 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"; # שורה חדשה}
פורסם 2011 במרץ 1114 שנים אם הולכים על PERL תמצא בCPAN מודולים שניתן לעשות בעזרתם הרבה. חפש TEXT::CSV
פורסם 2011 במרץ 1414 שנים מחבר תודה על ההודעה המושקעת אני מעריך את זה התחלתי עם זה בבאש עכשיו איך אני יכול לקחת מחרוזת ולפרק אותה לשלושה מחרוזת לפי הצרכים שלי לדוגמא : name=gil אני רוצה את סוג האופרטור את העמודה המבוקשת ואת השם הרצוי זה הצעד הבא ידידי
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.