Skip to main content

Closing out the books in ledger(1)

I put this here mostly because I forget how to do it and have to make multiple starts to get it right.

ledger -f ledger.txt  print \
  -e 2022-1-1 > 2021.txt

ledger -f ledger.txt equity
  -e 2022-1-1 > tempfile.txt

 echo >> tempfile.txt

 ledger -f ledger.txt print \
  -b 2022-1-1 >> tempfile.txt

mv tempfile.txt ledger.txt
Closing out the books for 2021

Note: I keep my ledger files in git so I have a fair bit of freedom to experiment. If I mess things up beyond repair, I can always git reset --hard to revert to the most recent snapshot. I recommend you make a backup as well.

The first step pulls all transactions ending (-e) before 2022-1-1 into 2021.txt as an archive.

Next, create a temporary file containing the "Opening Balances" for the period ending (-e) before 2022-1-1 using the equity command. Then echo adds a blank line before transactions start (note the >> to append to this file rather than overwrite it). Finally, print all the transactions beginning (-b) on 2022-1-1 into our temporary file.

At this point, we can move the tempfile.txt back atop the original transaction log.

If you mark items as cleared/uncleared you might want to only close transactions that have cleared, use --cleared & --uncleared accordingly:

ledger -f ledger.txt print \
  --cleared \
  -e 2022-1-1 > 2021.txt

ledger -f ledger.txt equity
  --cleared \
   -e 2022-1-1 > tempfile.txt

 echo >> tempfile.txt

 ledger -f ledger.txt print \
  --uncleared \
   -b 2022-1-1 >> tempfile.txt

mv tempfile.txt ledger.txt
Closing out the books for 2021, keeping uncleared transactions