One tip I have to make large-ish awk programs readable is to name the columns in the BEGIN section. Then, you'd use $colname instead of $1, $2, etc. for instance:

BEGIN{ item_type = 1; item_name = 2; price = 3; sale = 4; #etc }

Now, in place of $1, you'd say $item_type which significantly improves overall readability of the code.

If you want to do that, use vnlog instead. You're 90% there already. It formalizes the idea of a header to label columns, and allows normal unix data-processing tools to just work with those labels. Your awk use case is quite literally "vnl-filter --eval"

https://github.com/dkogan/vnlog/