home *** CD-ROM | disk | FTP | other *** search
- #!/p/kd/fdc/solaris9/wermit +
- #!/opt/local/bin/kermit +
- #
- # fdc, Tue Apr 6 15:11:48 2010
- # Updated Sat May 1 12:40:18 2010 to fix two typos.
- #
- # Summarizes product orders or product clicks from an Amazon ORDERS
- # (not EARNINGS) report, which has been downloaded from the Amazon
- # Associate site as a TSV (Tab-separated value) file.
- #
- # Usage: tally.ksc tsvfilename [ { orders, clicks } ] > outputfile
- #
- # The optional second argument is either ORDERS or CLICKS. If you leave
- # off the second argument it defaults to ORDERS. The program reads the
- # file and calculates how many orders (or clicks) were received for each
- # product, and then lists the products in descending order of orders
- # (or clicks) so you can see which were the most ordered or the most
- # looked at.
- #
- # Requires C-Kermit 9.0 or later.
- #
- # Amazon Order report fields (separated by Tab) are:
- # 1. Product Line
- # 2. Item Name
- # 3. ASIN
- # 4. Date (yyyy/mm/dd)
- # 5. Link Type
- # 6. Tracking ID
- # 7. Product Link Conversion
- # 8. Product Link Clicks
- # 9. Items Ordered Through Product Links
- # 10. All Other Items Ordered
- # 11. Total Items Ordered
-
- .myname := \fbasename(\%0) # Name of this script
- def usage exit 1 { # Usage message
- "Usage: \m(myname) filename.tsv [{orders,clicks}] > outputfile"
- }
- if not def \%1 usage # First argument is required
- .what = orders # Count orders by default
- if def \%2 .what := \%2 # Or count what arg2 says
-
- fopen /read \%c \fcontents(\%1) # Open TSV file
- if fail exit 1 # Exit upon failure
-
- set case off # Set up orders or clicks report
- switch \m(what) {
- :orders
- .field = 11, .orders = 1, .clicks = 0
- echo ORDERS report...
- break
- :clicks
- .field = 8, .orders = 0, .clicks = 1
- echo CLICKS report...
- break
- :default
- usage
- }
- .items = 0 # Initialize items counter
-
- while true { # Loop through records
- fread /line \%c line # Read one record
- if fail break # Check for EOF
- .\%n := \fsplit(\m(line),&a,\9,ALL,,1) # Split record into fields (\9=Tab)
- if equ "" "\&a[2]" continue # If there is no item skip this record
- if < \%n field continue # Skip record if not enough fields
- if not num \&a[field] continue # Skip if count field is not numeric
- increment items # Count an item
- .\&a[2] := \fsubstitute(\&a[2],\40\41,) # Avoid an obscure syntax problem
- _incr count<\&a[2]> \&a[field] # Count the quantity
- incr t \&a[field] # Accumulate total quantity
- }
- fclose \%c # Close TSV file
-
- .m := \faaconvert(count,&x,&y) # Convert associative array
-
- array sort /num /rev &y &x # Sort result arrays
- for i 1 m 1 { # Display results
- echo "\fsubstr(\flpad(\&y[i],6)\32\32\&x[i],1,78)"
- }
- if orders { # For orders...
- echo Distinct items ordered: \m(items)
- echo Total items ordered: \m(t)
- } else { # For clicks...
- echo Distinct items clicked: \m(items)
- echo Total items clicked: \m(t)
- }
- exit 0
-
- ; Local Variables:
- ; comment-column:40
- ; comment-start:"# "
- ; End:
-