I tried a first response to this but realized I had screwed up what it was you were actually showing in your data. Am I correct in understanding that you're recording the total price / unit price to calculate the stock units? I've always just entered the total number of units as expressed by the fund and the total price paid.
So what I would probably do if I were faced with this problem is use a program to massage the entries into the format I wanted. If you can do this via the python interface that might be the most robust. Here's what I came up with in awk do massage the sample data: $ cat sample.awk { if ($1 !~ /401K/ || $(NF-3) !~ /\//) { print $0; next; } stock=$(NF-2); sub(/\)/, "", stock); ratio=$(NF-3); sub(/\(/, "", ratio); split(ratio, arr, "/"); total=arr[1]; unit=arr[2]; printf(" "); for (i = 1; i <= NF; i++) { if (i == (NF-3)) { printf(" %.2f", (total/unit)); } else if (i == (NF-2)) { printf(" %s", stock); } else if (i == (NF-1)) { printf(" @@"); } else if (i == NF) { printf(" $%.2f", total) } else { if (i > 1) { printf(" "); } printf("%s", $i); } if (i == NF) { printf("\n"); } } } $ cat sample.dat 2012/03/27 * (DD) Earnings Assets:Investments:401K:Deferred (198.82/106.30 VIFSX) @ $106.30 Assets:Investments:401K:Matching (99.40/106.30 VIFSX) @ $106.30 Assets:Investments:401K:Profit Sharing (6.38/106.30 VIFSX) @ $106.30 Income:Exempt:Dividends $ awk -f sample.awk sample.dat 2012/03/27 * (DD) Earnings Assets:Investments:401K:Deferred 1.87 VIFSX @@ $198.82 Assets:Investments:401K:Matching 0.94 VIFSX @@ $99.40 Assets:Investments:401K:Profit Sharing 0.06 VIFSX @@ $6.38 Income:Exempt:Dividends ledger reports the same output for both the old and new format: 2.87 VIFSX Assets:Investments:401K 1.87 VIFSX Deferred 0.94 VIFSX Matching 0.06 VIFSX Profit Sharing $-305 Income:Exempt:Dividends -------------------- $-305 2.87 VIFSX