basicsys@mars~/lec6>cat F1 Jim Alchin 21 Seattle Bill Gates 8 Seattle Steve Jobs 246 Nevada Scott Neally 2122 Los Angeles basicsys@mars~/lec6>sort F1 Bill Gates 8 Seattle Jim Alchin 21 Seattle Scott Neally 2122 Los Angeles Steve Jobs 246 Nevada basicsys@mars~/lec6>sort -n -k 3,3 F1 Bill Gates 8 Seattle Jim Alchin 21 Seattle Steve Jobs 246 Nevada Scott Neally 2122 Los Angeles basicsys@mars~/lec6>sort -k 3,3 F1 Jim Alchin 21 Seattle Scott Neally 2122 Los Angeles Steve Jobs 246 Nevada Bill Gates 8 Seattle basicsys@mars~/lec6>sort -k 3n,3 F1 Bill Gates 8 Seattle Jim Alchin 21 Seattle Steve Jobs 246 Nevada Scott Neally 2122 Los Angeles basicsys@mars~/lec6>sort -k 3,3n F1 Bill Gates 8 Seattle Jim Alchin 21 Seattle Steve Jobs 246 Nevada Scott Neally 2122 Los Angeles basicsys@mars~/lec6>sort -k 3n,3n F1 Bill Gates 8 Seattle Jim Alchin 21 Seattle Steve Jobs 246 Nevada Scott Neally 2122 Los Angeles basicsys@mars~/lec6>sort -k 3nr,3 F1 Scott Neally 2122 Los Angeles Steve Jobs 246 Nevada Jim Alchin 21 Seattle Bill Gates 8 Seattle basicsys@mars~/lec6>cat F2 Jim Alchin 21 Seattle aef Bill Gates 21 Seattle aef Steve Jobs 21 Nevada aaa Scott Neally 85 Los Angeles basicsys@mars~/lec6>sort -k 3n,3n -k 4,4 -k 1,1 F2 Steve Jobs 21 Nevada aaa Bill Gates 21 Seattle aef Jim Alchin 21 Seattle aef Scott Neally 85 Los Angeles basicsys@mars~/lec6>cat F2.1 Jim Alchin 21 Seattle aaa Bill Gates 21 Seattle aef Steve Jobs 21 Nevada aaa Scott Neally 85 Los Angeles basicsys@mars~/lec6>sort -k 3n,3n -k 4,4 -k 1,1 F2.1 Steve Jobs 21 Nevada aaa Bill Gates 21 Seattle aef Jim Alchin 21 Seattle aaa Scott Neally 85 Los Angeles basicsys@mars~/lec13>cat A1 BEGIN {x=1;y=2;z=3; f1(x,y); print "outside f1 x=" x " y=" y " z=" z " a="a } function f1 (a,b) { print "start of f1 x=" x " y=" y " z=" z " a="a " b=" b a=8; z=10; print "end of f1 x=" x " y=" y " z=" z " a="a " b=" b } basicsys@mars~/lec13>awk -f A1 start of f1 x=1 y=2 z=3 a=1 b=2 end of f1 x=1 y=2 z=10 a=8 b=2 outside f1 x=1 y=2 z=10 a= basicsys@mars~/lec13>cat A1.1 BEGIN {x=1;y=2;z=3; f1(x,y); print "outside f1 x=" x " y=" y " z=" z " a="a } function f1 (x,y) { print "start of f1 x=" x " y=" y " z=" z " a="a " b=" b x=8; z=10; print "end of f1 x=" x " y=" y " z=" z " a="a " b=" b } basicsys@mars~/lec13>awk -f A1.1 start of f1 x=1 y=2 z=3 a= b= end of f1 x=8 y=2 z=10 a= b= outside f1 x=1 y=2 z=10 a= basicsys@mars~/lec13>cat A2 BEGIN {x[1]=1; x[2]=2; y[1]=3; f1(x,y[1]); print "outside f1 x[1]=" x[1] " x[2]=" x[2] " y[1]=" y[1] } function f1 (a,b) { print "start of f1 a[1]=" a[1] " b[1]=" b[1] " b= " b " x[1]=" x[1] a[1]=8; a[2]=88; b=9; print "end of f1 a[1]=" a[1] " b[1]=" b[1] " b= " b " x[1]=" x[1] } basicsys@mars~/lec13>awk -f A2 awk: A2:5: fatal: attempt to use scalar parameter `b' as an array basicsys@mars~/lec13>cat A3 BEGIN {x[1]=1; x[2]=2; y[1]=3; f1(x,y[1]); print "outside f1 x[1]=" x[1] " x[2]=" x[2] " y[1]=" y[1] } function f1 (a,b) { print "start of f1 a[1]=" a[1] " b= " b " x[1]=" x[1] a[1]=8; a[2]=88; b=9; print "end of f1 a[1]=" a[1] " b= " b " x[1]=" x[1] } basicsys@mars~/lec13>awk -f A3 start of f1 a[1]=1 b= 3 x[1]=1 end of f1 a[1]=8 b= 9 x[1]=8 outside f1 x[1]=8 x[2]=88 y[1]=3 basicsys@mars~/lec13>cat A4 { for (i=1; i<= NF; i++) { A[NR,i]=$i } } END { for (i=1; i <=NR/2; i++) { s=A[i,i]; for (j=i; j <= NR-(i-1); j++) { if (A[i,j] != s) { print "NO" ; exit} if (A[j,i] != s) { print "NO" ; exit} if (A[NR-(i-1),j] != s) { print "NO" ; exit} if (A[j,NR-(i-1)] != s) { print "NO" ; exit} } } print "YES" } basicsys@mars~/lec13>cat F1 2 2 2 2 2 2 2 1 1 1 1 2 2 1 3 3 1 2 2 1 3 3 1 2 2 1 1 1 1 2 2 2 2 2 2 2 basicsys@mars~/lec13>awk -f A4 F1 YES basicsys@mars~/lec13>cat A5 { for (i=1; i<= NF; i++) { A[NR,i]=$i } } END { for (i=1; i <=NR/2; i++) { if (check_row(A,i,i,NR-(i-1))=="NO") { print "NO" ; exit} if (check_row(A,NR-(i-1),i,NR-(i-1))=="NO") { print "NO" ; exit} if (check_column(A,i,i,NR-(i-1))=="NO") { print "NO" ; exit} if (check_column(A,NR-(i-1),i,NR-(i-1))=="NO") { print "NO" ; exit} } print "YES" } function check_row(A,i,j1,j2) { s=A[i,j1] for (p=j1; p<= j2; p++) { if (A[i,p] != s) { return "NO" } } return "YES" } function check_column(A,i,j1,j2) { s=A[j1,i] for (p=j1; p<= j2; p++) { if (A[p,i] != s) { return "NO" } } return "YES" } basicsys@mars~/lec13>cat F1 2 2 2 2 2 2 2 1 1 1 1 2 2 1 3 3 1 2 2 1 3 3 1 2 2 1 1 1 1 2 2 2 2 2 2 2 basicsys@mars~/lec13>awk -f A5 F1 YES basicsys@mars~/lec13>cat A6 { for (i=1; i<= NF; i++) { A[FILENAME,FNR,i]=$i } } END { for (x=1; x < length(ARGV); x++) { if (check_file(A,ARGV[x],FNR)=="NO") { print ARGV[x] ": NO" } else {print ARGV[x] ": YES"} } } function check_file(A,file,n) { for (i=1; i <=n/2; i++) { if (check_row(A,file,i,i,n-(i-1))=="NO") { return "NO"} if (check_row(A,file,n-(i-1),i,n-(i-1))=="NO") { return "NO"} if (check_column(A,file,i,i,n-(i-1))=="NO") { return "NO" ; exit} if (check_column(A,file,n-(i-1),i,n-(i-1))=="NO") { return "NO" } } return "YES" } function check_row(A,file,i,j1,j2) { s=A[file,i,j1] for (p=j1; p<= j2; p++) { if (A[file,i,p] != s) { return "NO" } } return "YES" } function check_column(A,file,i,j1,j2) { s=A[file,j1,i] for (p=j1; p<= j2; p++) { if (A[file,p,i] != s) { return "NO" } } return "YES" } basicsys@mars~/lec13>cat F1 2 2 2 2 2 2 2 1 1 1 1 2 2 1 3 3 1 2 2 1 3 3 1 2 2 1 1 1 1 2 2 2 2 2 2 2 basicsys@mars~/lec13>cat F2 2 2 2 2 2 2 2 1 1 1 1 2 2 1 3 3 1 2 2 1 3 3 1 2 2 1 1 1 1 2 2 2 2 2 2 5 basicsys@mars~/lec13>awk -f A6 F1 F2 F1: YES F2: NO basicsys@mars~/lec13>cat A7 { for (i=1; i<= NF; i++) { A[FILENAME,FNR,i]=$i B[FILENAME]=FNR } } END { for (x=1; x < length(ARGV); x++) { if (check_file(A,ARGV[x],B[ARGV[x]])=="NO") { print ARGV[x] ": NO" } else {print ARGV[x] ": YES"} } } function check_file(A,file,n) { for (i=1; i <=n/2; i++) { if (check_row(A,file,i,i,n-(i-1))=="NO") { return "NO"} if (check_row(A,file,n-(i-1),i,n-(i-1))=="NO") { return "NO"} if (check_column(A,file,i,i,n-(i-1))=="NO") { return "NO" ; exit} if (check_column(A,file,n-(i-1),i,n-(i-1))=="NO") { return "NO" } } return "YES" } function check_row(A,file,i,j1,j2) { s=A[file,i,j1] for (p=j1; p<= j2; p++) { if (A[file,i,p] != s) { return "NO" } } return "YES" } function check_column(A,file,i,j1,j2) { s=A[file,j1,i] for (p=j1; p<= j2; p++) { if (A[file,p,i] != s) { return "NO" } } return "YES" } basicsys@mars~/lec13>cat F1 2 2 2 2 2 2 2 1 1 1 1 2 2 1 3 3 1 2 2 1 3 3 1 2 2 1 1 1 1 2 2 2 2 2 2 2 basicsys@mars~/lec13>cat F2 2 2 2 2 2 2 2 1 1 1 1 2 2 1 3 3 1 2 2 1 3 3 1 2 2 1 1 1 1 2 2 2 2 2 2 5 basicsys@mars~/lec13>cat F3 2 2 2 2 2 1 1 2 2 1 1 2 2 2 2 2 basicsys@mars~/lec13>awk -f A7 F1 F2 F3 F1: YES F2: NO F3: YES basicsys@mars~/lec13>cat P2 { split($0,A,":") split(A[2],B,",") for (x in B) { C[B[x]]= C[B[x]] " " A[1] } } END { for (y in C) { print y ":" C[y] } } basicsys@mars~/lec13>cat F4 dan:C,C++,JAVA uri:JAVA,Perl yossi:Perl,Bash,C basicsys@mars~/lec13>awk -f P2 F4 Bash: yossi JAVA: dan uri C: dan yossi C++: dan Perl: uri yossi basicsys@mars~/lec13>cat football Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer Sheva Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva Ronen Ha. 3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa basicsys@mars~/lec13>cat scores #!/bin/sh # scores echo -n "" >| temp for name do egrep "$name" football | calc_score "$name" >> temp done sort -k 3nr,3 temp | calc_place basicsys@mars~/lec13>cat calc_score #!/bin/sh # calc_score sum=0 while read line do i=$(echo "$line" | cut -d" " -f3) sum=$[$sum+$i] done echo "$1 $sum" basicsys@mars~/lec13>cat calc_place #!/bin/sh # calc_place place=1 read line goals=$(echo "$line"| cut -d" " -f3) echo "$place $line" while read line do lgoals=$(echo "$line"| cut -d" " -f3) if [ $goals -ne $lgoals ] then place=$[$place+1] goals=$lgoals fi echo "$place $line" done basicsys@mars~/lec13>scores "Alon Miz." "Eyal Ber." "Izak Zoh." "Ronen Ha." 1 Alon Miz. 6 1 Ronen Ha. 6 2 Izak Zoh. 4 3 Eyal Ber. 1