7.3 awk command and program examples


10. Examples:

$ awk '/Albuquerque/' cities
Albuquerque, New Mexico
$ grep 'Albuquerque' cities
Albuquerque, New Mexico

$ awk '{print}' people
John,P.		Physics		20
Rick,L.		Mechanical	21
Jack,T.		electrical	23
Larry,M.	Chemical	22
Mary,Q.		Electrical	21
Betty,B.	Math		22
Mike,A.		Civil		23
Ruth,M.		Math		21
Tony,R.		English		22
Sarah,S.	Electrical	24
$ awk '$3 > 22 { print $1 }' people
Jack,T.
Mike,A.
Sarah,S.
$ awk '$2 ~ /[Ee]lectrical/ { print $1 }' people
Jack,T.
Mary,Q.
Sarah,S.
$ awk '$0 ~ /^J.*/ { print $0 }' people
John,P.		Physics		20
Jack,T.		electrical	23

$ cat awkprog1
{ sum += $3
       ++no
}
END { printf "The average age is %.2f\n", sum/no }
$ awk -f awkprog1 people
The average age is 21.90

$ cat awkprog2
BEGIN { print "This is another variation" }
{ sum += $3
}
END { printf "The average age is %.2f\n", sum/NR }
$ awk -f awkprog2 people
This is another variation
The average age is 21.90

$ awk '{ if ($1 ~ /^J/) printf "%s\n", $0 > "Jfile"
> if ($2 ~ /^C/) printf "%s\n", $0 > "Cfile" }' people
$ cat Jfile
John,P.		Physics		20
Jack,T.		electrical	23
$ cat Cfile
Larry,M.	Chemical	22
Mike,A.		Civil		23

$ cat awkprog3
{ pos = index($1,",");
  lname = substr($1,pos+1,2);
  fname = substr($1,1,1);
  major = substr($2,1,3);
  name = fname lname;
  printf "%s\t%s\t%s\n", name, major, $3 | "sort"
}

$ awk -f awkprog3 people
BB.	Mat	22
JP.	Phy	20
JT.	ele	23
LM.	Che	22
MA.	Civ	23
MQ.	Ele	21
RL.	Mec	21
RM.	Mat	21
SS.	Ele	24
TR.	Eng	22

$ cat awkprog4
BEGIN {
	pi = 3.14159
	if (figure == "circle")
		printf "Area of a circle is %d\n", pi*s*s
	if (figure == "square")
		printf "Area of a square is %d\n", s*s
	if (figure == "triangle")
		printf "Area of a triangle is %d\n", 0.5*s*s
}
$ awk -f awkprog4 -v figure=circle -v s=3
Area of a circle is 28

$ cat products
knapsacks	22.00	 11
knickers	44.95	  0
knishes		 1.29	193
knives		11.98	 57
knobs		  .27	 35
$ awk '{ print $1, $2, $2 * $3 }' products
knapsacks 22.00 242
knickers 44.95 0
knishes 1.29 248.97
knives 11.98 682.86
knobs .27 9.45
$ awk '$3 > 0 { print $1, $2, $2 * $3; sum += $2 * $3 }
> END { print "\nTOTAL:", sum }' products
$ ls -la | awk '$1 ~ /^d/ { print $9 "/" } $1 ~ /^-..x/ { print $9 "*" }'

Questions? Robert Katz: katz@ned.highline.edu
Last Update April 7, 2005