שאלה ב-UNIX

sharon1003

New member
שאלה ב-UNIX

שלום,

ברצוני לשאול שאלה במערכת ה-UNIX.
יש לי סקריפט כלשהו אשר אני רוצה להשתמש בו על קובץ מסויים שידפיס לי על המסך צירוף קבוע כלשהו ובנוסף לצרף למשל את עמודה מס' 1.
אני משתמש בפקודה awk.

למשל קובץ בשם
1.txt

cat 1.txt |awk '{print "abc"$1}'

הבעיה שלי היא שהצירוף קבוע שלי הוא ארוך מאד ואז אם אני רושם במקום ה-abc שזה 3 תווים 100 תווים אז הוא רושם לי שלא ניתן לבצע את הפעולה
מכיוון שהמחרוזת גדולה מידי.

cat 1.txt |awk '{print "abcdeffsgfdlsjhflsfsdklfjsldfkjslkfjslkfjslkfdjslkfjslkfslkfjslsklfjslkfjslkfslfksldfkjslkfdjsdlfjdasdasjdkasdjalskdjlaskdjalskjdaslskdjalksdjlkdjdkl"$1}'

awk: string too long near line 1
awk: syntax error near line 1
awk: illegal statement near line 1


האם יש דרך לממש את זה שזה יעבוד ?

תודה מראש,
 

Dניאל Mור

New member
על איזו מערכת אתה מריץ את הפקודה?

האם במקרה, זה *באמת* UNIX? אם כן, איזו? בדוק האם מותקן לך gawk ונסה איתו.

בהצלחה.

+דניאל.
 

sharon1003

New member
UNIX

היי,

קודם כל תודה רבה על התשובה.

לצערי, המערכת לא תומכת בפקודה gawk.

יש דרך אחרת .
 

Testosterone

New member
נסה להשתמש במשתנים:

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

דוג':


STATEMENT=`echo "Today is a very boring day at work. Here's why:"`
SOME_COLUMN=`awk '{print $1} somefile.txt`

echo $STATEMENT $SOME_COLUMN
 

sharon1003

New member
היי - עדיין יש לי בעיה

היי ,

תודה רבה על 2 התשובות אך עדיין שתיהן לא עבודות לי ואני אסביר.

1. לגבי הפונקציה gawk:
מצאתי אותה במכונה אחרת וביצעתי ftp , לפונקציה הזאת ושמתי אותה במקום:
/home/test

אבל כאשר אני מבצע את הפקודה:
cat test | /home/test/gawk '{print $1"test123"}'
זה לא עובד ונותן את ה-Error הבא:
invalid argument

2. לגבי המשתנים:
רעיון טוב אבל כאשר מבצעים את הפקודה:
SOME_COLUMN=`awk '{print $1}' somefile.txt`

אז במקום שיציג את הפלט בעמודות הוא מציג אותה בטור.
לדוגמא במקום שיציג למשל:
a
b
c
c
c
d

אז הוא מציג:
a b c c c d

ואז ההמשך עם איחוד 2 המשתנים לא עובד בגלל הסיבה הזאת.

נא עזרתכם בפתרון הבעיה.

תודה רבה...
 

Testosterone

New member
אתה לא ממש ברור בשאלה שלך,

קודם כל, כשאתה כותב פקודות פה בפורום - תרשום אותן משמאל לימין. בעברית זה נראה רע ולא ברור.

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

נסה לתת את הדוגמאות האמיתיות של מה שאתה רוצה לעשות.
תדביק לפה את הקובץ ותסביר במדויק מה אתה מעוניין להשיג.
 

sharon1003

New member
היי - עכשיו זה יותר ברור ?

הבנת נכון.

יש לי עמודה מסויימת בקובץ (למשל אני רוצה לקחת רק את עמודה מס' 1, כמובן שיש לי עוד עמודות אחרי זה לקחת אבל בתור התחלה נגיד שאני רוצה רק את עמודה מס' 1 שאני שולף עם awk $1)
a
b
c
c
d

ורוצה להוסיף סטרינג ארוך מאד שהוא מחרוזת קבועה בצירוף עמודה מס' 1 (הסטרינג שצרפתי כאן בדוגמא הוא testtttt אבל בפועל צריך סטרינג הרבה יותר ארוך)למשל שהפלט יראה כך:
testtttta
teatttttb
testttttc
testttttc
testttttd

בנוסף אציין gawk עובד מצויין במכונה אחרת, עשיתי ftp ל-gawk , אבל שמנסה להשתמש במכונה הספציפית שאליה העברתי את הקובץ הוא כותב לי הודעת שגיאה invalid argumet (ציינתי למעלה).

לגבי העברית/אנגלית, כאשר אתה מסתכל על הפקודות שלי למעלה שאתה אומר שהן לא קריאות אתה יכול להפוך את הכיוון של הפקודות ע"י ctrl+shift השמאלי או הימני תלוי לאיזה כיוון אתה רוצה את הפקודות ואז תראה בדיוק את הפקודות.
בנוסף אם זה עדיין לא ברור אתחיל לצרף קבצים ואסביר שוב מההתחלה מה ברצוני לעשות.

עכשיו זה יותר ברור ?

תודה מראש,
 

Testosterone

New member
אל תגזים,

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

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

בכל אופן, הבנתי מה אתה רוצה, אבל לא הבנתי איפה הבעיה.
לצורך ההמחשה, יצרתי שני קבצים:

1.
cat constant.txt
# THIS-IS-A-CONSTANT-STRING-SO-WHAT

2.
cat dynamic.txt
#Mother Fucker
#Brother Fucker
#Sister Fukcer
#I'm A Fucker


הסקריפט שלי כך:

#!/bin/bash
CONSTANT=`cat constant`
for i in $(cat dymanic | awk '{print $1}') ; do echo "$CONSTANT $i" ; done


והתוצאה לפניך:

THIS-IS-A-CONSTANT-STRING-SO-WHAT Mother
THIS-IS-A-CONSTANT-STRING-SO-WHAT Brother
THIS-IS-A-CONSTANT-STRING-SO-WHAT Sister
THIS-IS-A-CONSTANT-STRING-SO-WHAT I'm
 

sharon1003

New member
שניה אני עושה ניסיון עם הקוד

ניסיון:
|/home/test awk '{print $1}'|

|/home/test awk '{print $1}'|
 

sharon1003

New member
תודה - שאלה נוספת אם אפשר

היי,


קודם כל תודה רבה על התשובה (אבדוק אם זה עובד ואעדכן).

דבר שני האם יש למישהו מושג בהמשך למה שכתבתי בתכתובות למעלה למה כשאני מעביר את התוכנית gawk ממכונה למכונה
אז במכונה שהעברתי אליה את הקובץ זה לא עובד.

אסביר שוב מה עשיתי:
העברת קובץ בשם gawk ממכונה אחת לאחרת ושמתי את הקובץ למשל בניתוב הבא:
/home/test/gawk

ועכשיו כשאני מבצע משהו עם הקובץ שהעברתי זה לא עובד:
לדוגמא לגבי קובץ בשם: 1.txt

cat 1.txt | /home/test/gawk '{print "abc"$1}'

הוא רושם invalid argument


זה היה אמור לעבוד ? לא ?

בנוסף סליחה על הבורות אבל איך מעתיקים את הקוד שיראה באופן נורמלי ? יש תחילת קוד וסיום קוד, שיחקתי עם זה קצת ואני לא מצליח.

תודה מראש,
 

BravoMan

Active member
Unix זה לא Windows, לא נהוג להעתיק ככה

סתם קבצים בינריים.

אבל אם כבר העתקת, האם נתת ל-gawk הרשאת ריצה?
אם לא, עשה זאת כך:

chmod +x /home/test/gawk

אם מסיבה כלשהי ה-chmod במערכת שלך לא מקבל x+ כפרמטר, תחליף אותו במספר 0755
 

sharon1003

New member
הי- זה עדיין לא עובד

היי,

בהתחלה כאשר ניסיתי להריץ הוא רשם לי permission deny,
ואז ביצעתי chmod 777 (הבאתי לו את כל ההרשאות).

זה לא עובד :(
 
למעלה