יסודות מערכות פתוחות ג ' בארה אחמד המכללה האקדמית נתניה The Awk Utility
The Awk Utility – example1 {print $0} p1 Yosi Ron Rami Dana f1 > awk -f p1 f1 הפעלה Yosi Ron Rami Dana פלט
The Awk Utility – example2 {print $1,$3} p1 Yosi Ron Rami Dana f1 > awk -f p1 f1 הפעלה Yosi 70 Ron 90 Rami 76 Dana 37 פלט
The Awk Utility – example3 {print FNR,NF,$0} p1 Yosi Ron Rami Dana f1 > awk -f p1 f1 הפעלה 1 6 Yosi Ron Rami Dana פלט
The Awk Utility – example4 {print NR,FNR,NF,$0} p1 Yosi Ron Rami Dana f1 > awk -f p1 f1 f2 הפעלה Yosi Ron Rami Dana Udi Unix data_structure Ahmad Java Unix c c# Gershon c# Asp.Net פלט Udi Unix, data_structure Ahmad Java, Unix, c, c# Gershon c#, Asp.Net f2
The Awk Utility – example5 BEGIN {“Hi”} {print NR,FNR,NF,$0} END {“Bye”} p1 Yosi Ron Rami Dana f1 > awk -f p1 f1 f2 הפעלה Hi Yosi Ron Rami Dana Udi Unix data_structure Ahmad Java Unix c c# Gershon c# Asp.Net Bye פלט Udi Unix, data_structure Ahmad Java, Unix, c, c# Gershon c#, Asp.Net f2
The Awk Utility – example6 p1 Number of data files is 2 file_No file file NR FNR NF $0 1 f1 f Yosi f1 f Ron f1 f Rami f1 f Dana f2 f Udi Unix, data_structure 2 f2 f Ahmad Java, Unix, c, c# 2 f2 f Gershon c#, Asp.Net bye פלט Udi Unix, data_structure Ahmad Java, Unix, c, c# Gershon c#, Asp.Net f2 BEGIN {print "Number of data files is",ARGC-1 print "file_No\tfile\tfile\tNR\tFNR\tNF\t$0" } { print ARGIND,"\t",ARGV[ARGIND],"\t",FILENAME,"\t",NR,"\t",FNR,"\t",NF,"\t",$0} END { print "bye“ } Yosi Ron Rami Dana f1 > awk -f p1 f1 f2 הפעלה
The Awk Utility – example7 {print "The length of ",$1,"is",length($1)} p1 The length of Yosi is 4 The length of Ron is 3 The length of Rami is 4 The length of Dana is 4 פלט Yosi Ron Rami Dana f1
The Awk Utility – example8 NR==2 {print $0} p1 Ron פלט Yosi Ron Rami Dana f1
The Awk Utility – example9 $3>70 {print $0} p1 Ron Rami פלט Yosi Ron Rami Dana f1
The Awk Utility – example10 !($3>70) {print $0} p1 Yosi Dana פלט Yosi Ron Rami Dana f1
The Awk Utility – example11 NR==2 || !($3>70) {print $0} p1 Yosi Ron Dana פלט Yosi Ron Rami Dana f1
The Awk Utility – example12 NR==1, NF==7 {print $0} p1 Yosi Ron Rami פלט Yosi Ron Rami Dana f1
The Awk Utility – example13 /Aviv/ {print $0} p1 Ron Tel-Aviv Aviv Haifa פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example14 $1==“Aviv” {print $0} p1 Aviv Haifa פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example15 $3==“Aviv” {print $0} p1 פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example16 BEGIN {max=0 ; Name=""} NF-2>max {max=NF-2 ; Name=$1} END {print Name,”with”,max,”grades”} p1 Aviv with 6 grades פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example17 BEGIN {n=0} /Aviv/ {n=n+1} END {print "Aviv occurs",n,"times."} p1 Aviv occurs 2 times. פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example18 END {print $0} p1 Dana Netanya פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example19 { sum=0; for (i=4;i<=NF;i++) sum=sum+$i; print $1,"Average is",sum/(NF-3); } p1 Yosi Average is 53 Ron Average is Aviv Average is 58 Dana Average is 72 פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example20 BEGIN {maxAvg=0; Name=""} { sum=0; for (i=4;i<=NF;i++) sum=sum+$i; print $1,"Average is",sum/(NF-3); if (maxAvg < sum/(NF-3) ) { maxAvg=sum/(NF-3); Name=$1; } END {print Name,"with", maxAvg} p1 Yosi Average is 53 Ron Average is Aviv Average is 58 Dana Average is 72 Ron with פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example21 {Line[NR] = $0 } END {var = NR; while (var > 0) { print line[var] var -- } p1 Dana Netanya Aviv Haifa Ron Tel-Aviv Yosi Ranana פלט Yosi Ranana Ron Tel-Aviv Aviv Haifa Dana Netanya f1
The Awk Utility – example22 (05/2/a) BEGIN {max=0} NF > max { max=NF; sum=0; for (k=1;k<=NF;k++) sum=sum+$k; } END {print sum} p1 82 פלט f1
The Awk Utility – example23 (2006 moed a) כתוב/כתבי תוכנית ב- awk בשם P2 שמקבלת פרמטר אחד שהינו שם קובץ (בהמשך נקרא לו קובץ 1). הנח/י שהתוכן של קובץ 1 הוא מטריצה של מספרים. המספרים בכל שורה בקובץ 1 מופרדים ע"י תו רווח אחד או יותר. התוכנית תדפיס Yes אם מתקיים לפחות אחד משני התנאים הבאים: (1) סכום המספרים בכל שורה בקובץ הינו קבוע, (2) סכום המספרים בכל עמודה בקובץ הינו קבוע,אחרת התוכנית תדפיס No. לדוגמה, נניח שתוכן הקובץ F הוא: ותוכן הקובץ F2 הוא: לאחר הפעלת התוכנית ע"י הפקודה: >awk -f P2 F יתקבל הפלט: Yes לאחר הפעלת התוכנית ע"י הפקודה: >awk -f P2 F2 יתקבל הפלט: Yes
The Awk Utility – example23 (2006 moed a) { for (i=1;i<=NF;i++) { col[i]=col[i]+$i row[NR]=row[NR]+$i } END { for (i=1;i<NF;i++) if ( col[i]!=col[i+1]){ for (i=1;i<NR;i++) if (row[i]!=row[i+1]) { print "No" exit } break } print "Yes" }
The Awk Utility – example24 { for(k=1;k<=NF;k++) A[ARGIND,FNR,k]=$k; } END { for (i=1;i<=FNR;i++) { for (j=1;j<=NF;j++) { for (k=1;k<=ARGIND;k++) sum+=A[k,i,j]; printf("%-5d",sum); sum=0; } printf("\n"); }
The Awk Utility – example25 { for(k=1;k<=NF;k++) A[0,FNR,k]+=$k; } END { for (i=1;i<=FNR;i++) { for (j=1;j<=NF;j++) printf("%-5d",A[0,i,j]); printf("\n"); }
The Awk Utility – example21 (2006 moed a) איך ממשיכים הלאה ?