====== AWK - BEGIN and END ====== Actions can be specified to take place prior to the actual start of processing or after it has been completed with **BEGIN** and **END** statements respectively. * **BEGIN** statements are most commonly used to establish variables or display a header. * **END** statements, on the other hand, can be used to continue processing after the program has finished. ---- Assuming a file, **test.txt**, exists with the following contents: 10 Peter Terence Roux 45 11 Virginia Genevieve Roux 45 12 Felix Devon Roux 5 13 David Bruce Stevenson 48 14 Bob James Smith 16 48 Adam Winter Ridley 23 ---- ===== Basic BEGIN Statement ===== Issue the following command: awk 'BEGIN {print "NUMBER ITEM QUANTITY PRICE"}' test.txt returns: NUMBER ITEM QUANTITY PRICE ---- This would be more useful when run as: awk 'BEGIN {print "NUMBER ITEM QUANTITY PRICE"}{print NR,$1,$2,$3}' test.txt returns: NUMBER ITEM QUANTITY PRICE 1 10 Peter Terence 2 11 Virginia Genevieve 3 12 Felix Devon 4 13 David Bruce 5 14 Bob James 6 48 Adam Winter **NOTE:** * The **BEGIN** has allowed the header to be added to the output. * The **NR** variable used in the 2nd print numbers each line. It is a built-in variable of AWK. ---- ===== Basic END Statement ===== Assuming a file, **test2.txt**, exists with the following contents: pens 10 1.99 pencils 20 3.99 staplers 5 8.99 rulers 12 2.50 Issue the following command: awk '{x=x+($2*$3)} END {print "Total Value of Inventory: "x}' test2.txt returns: Total Value of Inventory: 174.65 ---- This would be more useful when run as: awk '{x=x+($2*$3)} {print $1,"QTY: "$2,"PRICE:"$3,"TOTAL: "$2*$3} END {print "Total Value of Inventory: " x}' test2.txt returns: pens QTY: 10 PRICE:1.99 TOTAL: 19.9 pencils QTY: 20 PRICE:3.99 TOTAL: 79.8 staplers QTY: 5 PRICE:8.99 TOTAL: 44.95 rulers QTY: 12 PRICE:2.50 TOTAL: 30 Total Value of Inventory: 174.65 **NOTE:** * The **END** has allowed a total line to be added to the output. * It is only run at the end. ----