That looks like a fine illustration of awk's basic principles actually I'll just comment it a bit more:
# awk code blocks work like CONDITION { code } WHENTOPRINT
# For each line, { code } gets run when CONDITION is true
# and the line gets printed back out when WHENTOPRINT is true.
# The code block doesn't have to be executed for WHENTOPRINT to
# cause it to print a line.
#
# CONDITION is default true if not given. WHENTOPRINT is default false.
awk '
# Special code section run before any lines are read
BEGIN {
# Field separator. It defaults to whitespace but can be anything.
# Lines read get split on it, put into special variables $1,$2,...
# all the way up to NF, the last field. NF is the number, $NF is the
# last field itself. $0 is the entire line.
# ( $ is an operator, by the way. You can do N=1; print $N to print field 1)
FS="*"
# When the 'print' command is used, awk puts the line back
# together from the $1,$2,...$NF fields before printing it, you can
# control what it joins together fields with.
OFS="*"}
# The code block gets run whenever the regex /^ABC/ is true --
# i.e. whenever the line begins with ABC.
/^ABC/ {
# You can set fields, not just read them, handy for altering text
# On the go. Here, we change the 7th field into 13 for any line
# beginning with ABC.
$7="13";
# You can also tell awk when to print explicitly, by using the 'print'
# command. By default it prints out the entire line assembled from
# the current contents of $1,$2,...$NF
print }' filename