basicsys@mars~>printf "hi" hibasicsys@mars~>printf "hi\n" hi basicsys@mars~>printf "hi %d\n" 4 hi 4 basicsys@mars~>printf "hi %dbye\n" 4 hi 4bye basicsys@mars~>printf "hi %5dbye\n" 4 hi 4bye basicsys@mars~>printf "hi %-5dbye\n" 4 hi 4 bye basicsys@mars~>printf "hi %03dbye\n" 4 hi 004bye basicsys@mars~>printf "hi %03dbye%s\n" 4 abc hi 004byeabc basicsys@mars~>printf "hi %03dbye%8sg\n" 4 abc hi 004bye abcg basicsys@mars~>printf "hi %03dbye%-8sg\n" 4 abc hi 004byeabc g basicsys@mars~/lec10>cat F1 yyy moshe1 moshe2 no mosh abc basicsys@mars~/lec10>awk '/moshe/ {print;print;print}' F1 yyy moshe1 yyy moshe1 yyy moshe1 moshe2 moshe2 moshe2 basicsys@mars~/lec10>awk '{print;print;print}' F1 yyy moshe1 yyy moshe1 yyy moshe1 moshe2 moshe2 moshe2 no mosh no mosh no mosh abc abc abc basicsys@mars~/lec10>cat F1 yyy moshe1 moshe2 no mosh abc basicsys@mars~/lec10>cat F2 aa bb cc dd ee fff gg basicsys@mars~/lec10>awk '{print $3 $1}' F2 ccaa fffdd basicsys@mars~/lec10>awk '{print $3,$1}' F2 cc aa fff dd basicsys@mars~/lec10>awk '{print $3" "$1}' F2 cc aa fff dd basicsys@mars~/lec10>awk '{print $0,NF}' F2 aa bb cc 3 dd ee fff gg 4 basicsys@mars~/lec10>awk '{print $0,$NF}' F2 aa bb cc cc dd ee fff gg gg basicsys@mars~/lec10>awk '{print $NF}' F2 cc gg basicsys@mars~/lec10>awk '{print NR,$0}' F1 F2 1 yyy moshe1 2 moshe2 3 no mosh 4 abc 5 aa bb cc 6 dd ee fff gg basicsys@mars~/lec10>awk '{print FNR,$0}' F1 F2 1 yyy moshe1 2 moshe2 3 no mosh 4 abc 1 aa bb cc 2 dd ee fff gg basicsys@mars~/lec10>cat F4 aa 8 2 bb 7 6 cc 2 4 basicsys@mars~/lec10>awk '$3>2 {print $0,$2*$3}' F4 bb 7 6 42 cc 2 4 8 basicsys@mars~/lec10>awk '$3>2 {print $0,x*1}' F4 bb 7 6 0 cc 2 4 0 basicsys@mars~/lec10>awk '$3>2 {print $0,x+1}' F4 bb 7 6 1 cc 2 4 1 basicsys@mars~/lec10>awk '$3>2 {x=5;print $0,x+1}' F4 bb 7 6 6 cc 2 4 6 basicsys@mars~/lec10>awk '$3>2 {x=$2;print $0,x+1}' F4 bb 7 6 8 cc 2 4 3 basicsys@mars~/lec10>awk '$3>2 {x=1.2;print $0,x*2}' F4 bb 7 6 2.4 cc 2 4 2.4 basicsys@mars~/lec10>echo $[1.2*2] -bash: 1.2*2: syntax error: invalid arithmetic operator (error token is basicsys@mars~/lec10>echo $[12/10] 1 basicsys@mars~/lec10>awk '$3>2 {print 12/10}' F4 1.2 1.2 basicsys@mars~/lec10>cat F3 1999 12 ab Fiat 200000 130 cc Subaru basicsys@mars~/lec10>awk '{printf "year %8d no %4d car %-8s good\n",$1,$2,$4}' F3 year 1999 no 12 car Fiat good year 200000 no 130 car Subaru good The following example shows how to align to the right depending on a value of a variable (variable x in this example). basicsys@mars~/lec10>cat F3 1999 12 ab Fiat 200000 130 cc Subaru basicsys@mars~/lec10>x=8 basicsys@mars~/lec10>awk \{printf\ \"year\ %${x}d\\n\",\$2\} F3 year 1999 year 200000 basicsys@mars~/lec10>awk '{printf "year %'${x}'d\n",$2}' F3 year 1999 year 200000 basicsys@mars~/lec11>cat F1 aaab ch d a1 bbb ee abc uu dd eee gg basicsys@mars~/lec11>awk 'NF>2 {print "more than 2 fields",$0}' F1 more than 2 fields aaab ch d more than 2 fields abc uu dd eee gg basicsys@mars~/lec11>awk 'NF==3 {print "exectly 3 fields",$0}' F1 exectly 3 fields aaab ch d basicsys@mars~/lec11>awk 'NF==3 {print "3",$0} NF==5 {print "5",$0}' F1 3 aaab ch d 5 abc uu dd eee gg basicsys@mars~/lec11>awk 'NF==3 || NF==5 {print NF,$0}' F1 3 aaab ch d 5 abc uu dd eee gg basicsys@mars~/lec11>awk 'NF>=3 {print "3",$0} NF==5 {print "5",$0}' F1 3 aaab ch d 3 abc uu dd eee gg 5 abc uu dd eee gg basicsys@mars~/lec11>awk 'NF>=3 && NF<=5 {print NF,$0}' F1 3 aaab ch d 5 abc uu dd eee gg basicsys@mars~/lec11>cat F1 aaab ch d a1 bbb ee abc uu dd eee gg basicsys@mars~/lec11>cat P1 NF==3 {print "3",$0} NF==5 {print "5",$0} basicsys@mars~/lec11>awk -f P1 F1 3 aaab ch d 5 abc uu dd eee gg basicsys@mars~/lec11>cat P1 #!/bin/awk -f NF==3 {print "3",$0} NF==5 {print "5",$0} basicsys@mars~/lec11>cat F1 aaab ch d a1 bbb ee abc uu dd eee gg basicsys@mars~/lec11>P1 F1 -bash: ./P1: Permission denied basicsys@mars~/lec11>chmod u+x P1 basicsys@mars~/lec11>P1 F1 3 aaab ch d 5 abc uu dd eee gg basicsys@mars~/lec11>cat F1 1 Yossi 10000 2 Amir 5000 basicsys@mars~/lec11>cat P1 BEGIN {print "NAME SALARY"} {print $2,$3} END {print NR,"EMPLOYEES"} basicsys@mars~/lec11>awk -f P1 F1 NAME SALARY Yossi 10000 Amir 5000 2 EMPLOYEES basicsys@mars~/lec11>cat P1 {print $2,$3} END {print NR,"EMPLOYEES"} BEGIN {print "NAME SALARY"} basicsys@mars~/lec11>cat F1 1 Yossi 10000 2 Amir 5000 basicsys@mars~/lec11>awk -f P1 F1 NAME SALARY Yossi 10000 Amir 5000 2 EMPLOYEES basicsys@mars~/lec11/examples>cat F1 abc def ghe a b c d basicsys@mars~/lec11/examples>cat F2 100 20000 25 basicsys@mars~/lec11/examples>awk '{print FILENAME,$0}' F1 F2 F1 abc def F1 ghe F1 a b c d F2 100 F2 20000 F2 25 basicsys@mars~/lec11/examples>cat F1 abc def ghe a b c d basicsys@mars~/lec11/examples>cat F2 100 20000 25 basicsys@mars~/lec11/examples>cat F3 abc basicsys@mars~/lec11/examples>cat A1 BEGIN { for (i=0; icat F1 abc de a x basicsys@mars~/lec11>awk -f P1 F1 3 lines 4 words 11 chars basicsys@mars~/lec11>cat F1 abc de a x basicsys@mars~/lec11>cat F2 abdd e f basicsys@mars~/lec11>cat P1 { nc = nc + length($0) + 1 nw = nw + NF } END {print NR, "lines", nw, "words", nc, "char basicsys@mars~/lec11>awk -f P1 F1 F2 5 lines 7 words 20 chars basicsys@mars~/lec11>awk '{print $1}' F1 abc de a basicsys@mars~/lec11>awk '{print $1}' abc def abc ghe www ghe basicsys@mars~/lec11>awk '{print $1}' abc def abc basicsys@mars~/lec11>echo "abc def" | awk '{print $1}' abc basicsys@mars~/lec11>basicsys@mars~/lec11>echo "123 def" | awk '{print $1}' F1 abc de a basicsys@mars~/lec11>cat P2 BEGIN {i=1} { if (FILENAME != ARGV[i]) { print ARGV[i], nc, "chars" nc=0; i++ } } { nc = nc + length($0) + 1 } END { print ARGV[i], nc, "chars" } basicsys@mars~/lec11>cat F1 abc de a x basicsys@mars~/lec11>cat F2 abdd e f basicsys@mars~/lec11>awk -f P2 F1 F2 F1 11 chars F2 9 chars basicsys@mars~/lec11>cat P2 BEGIN {i=1} { if (FILENAME != ARGV[i]) { print ARGV[i], nc, "chars" nc=0; i++ } } { nc = nc + length($0) + 1 } END { print ARGV[i], nc, "chars" print "FILENAME="FILENAME } basicsys@mars~/lec11>awk -f P2 F1 F2 F1 11 chars F2 9 chars FILENAME=F2 basicsys@mars~/lec11>cat P3 BEGIN { i= ARGV[1]; j= ARGV[2]; ARGV[1] = ""; ARGV[2] = "" } (FNR >= i) && (FNR <= j) { print FILENAME, FNR ":", $0 } basicsys@mars~/lec11>awk -f P3 2 3 F1 F2 F1 2: de F1 3: a x F2 2: e f F2 3: 1