hledger/hledger/Hledger/Cli/Commands/Print.txt
2024-06-07 07:05:52 -07:00

187 lines
8.2 KiB
Plaintext

print
Show full journal entries, representing transactions.
Flags:
-x --explicit show all amounts explicitly
--show-costs show transaction prices even with conversion
postings
--round=TYPE how much rounding or padding should be done when
displaying amounts ?
none - show original decimal digits,
as in journal
soft - just add or remove decimal zeros
to match precision (default)
hard - round posting amounts to precision
(can unbalance transactions)
all - also round cost amounts to precision
(can unbalance transactions)
--new show only newer-dated transactions added in each
file since last run
-m --match=DESC fuzzy search for one recent transaction with
description closest to DESC
-O --output-format=FMT select the output format. Supported formats:
txt, beancount, csv, tsv, json, sql.
-o --output-file=FILE write output to FILE. A file extension matching
one of the above formats selects that format.
The print command displays full journal entries (transactions) from the
journal file, sorted by date (or with --date2, by secondary date).
Directives and inter-transaction comments are not shown, currently. This
means the print command is somewhat lossy, and if you are using it to
reformat/regenerate your journal you should take care to also copy over
the directives and inter-transaction comments.
Eg:
$ hledger print -f examples/sample.journal date:200806
2008/06/01 gift
assets:bank:checking $1
income:gifts $-1
2008/06/02 save
assets:bank:saving $1
assets:bank:checking $-1
2008/06/03 * eat & shop
expenses:food $1
expenses:supplies $1
assets:cash $-2
print explicitness
Normally, whether posting amounts are implicit or explicit is preserved.
For example, when an amount is omitted in the journal, it will not
appear in the output. Similarly, if a conversion cost is implied but not
written, it will not appear in the output.
You can use the -x/--explicit flag to force explicit display of all
amounts and costs. This can be useful for troubleshooting or for making
your journal more readable and robust against data entry errors. -x is
also implied by using any of -B,-V,-X,--value.
The -x/--explicit flag will cause any postings with a multi-commodity
amount (which can arise when a multi-commodity transaction has an
implicit amount) to be split into multiple single-commodity postings,
keeping the output parseable.
print amount style
Amounts are shown right-aligned within each transaction (but not aligned
across all transactions; you can do that with ledger-mode in Emacs).
Amounts will be (mostly) normalised to their commodity display style:
their symbol placement, decimal mark, and digit group marks will be made
consistent. By default, decimal digits are shown as they are written in
the journal.
With the --round (Added in 1.32) option, print will try increasingly
hard to display decimal digits according to the commodity display
styles:
- --round=none show amounts with original precisions (default)
- --round=soft add/remove decimal zeros in amounts (except costs)
- --round=hard round amounts (except costs), possibly hiding
significant digits
- --round=all round all amounts and costs
soft is good for non-lossy cleanup, formatting amounts more consistently
where it's safe to do so.
hard and all can cause print to show invalid unbalanced journal entries;
they may be useful eg for stronger cleanup, with manual fixups when
needed.
print parseability
print's output is usually a valid hledger journal, and you can process
it again with a second hledger command. This can be useful for certain
kinds of search (though the same can be achieved with expr: queries
now):
# Show running total of food expenses paid from cash.
# -f- reads from stdin. -I/--ignore-assertions is sometimes needed.
$ hledger print assets:cash | hledger -f- -I reg expenses:food
There are some situations where print's output can become unparseable:
- Value reporting affects posting amounts but not balance assertion or
balance assignment amounts, potentially causing those to fail.
- Auto postings can generate postings with too many missing amounts.
- Account aliases can generate bad account names.
print, other features
With -B/--cost, amounts with costs are shown converted to cost.
With --new, print shows only transactions it has not seen on a previous
run. This uses the same deduplication system as the import command. (See
import's docs for details.)
With -m DESC/--match=DESC, print shows one recent transaction whose
description is most similar to DESC. DESC should contain at least two
characters. If there is no similar-enough match, no transaction will be
shown and the program exit code will be non-zero.
print output format
This command also supports the output destination and output format
options The output formats supported are txt, beancount (Added in 1.32),
csv, tsv (Added in 1.32), json and sql.
The beancount format tries to produce Beancount-compatible output, as
follows:
- Transaction and postings with unmarked status are converted to
cleared (*) status.
- Transactions' payee and note are backslash-escaped and
double-quote-escaped and wrapped in double quotes.
- Transaction tags are copied to Beancount #tag format.
- Commodity symbols are converted to upper case, and a small number of
currency symbols like $ are converted to the corresponding currency
names.
- Account name parts are capitalised and unsupported characters are
replaced with -. If an account name part does not begin with a
letter, or if the first part is not Assets, Liabilities, Equity,
Income, or Expenses, an error is raised. (Use --alias options to
bring your accounts into compliance.)
- An open directive is generated for each account used, on the
earliest transaction date.
Some limitations:
- Balance assertions are removed.
- Balance assignments become missing amounts.
- Virtual and balanced virtual postings become regular postings.
- Directives are not converted.
Here's an example of print's CSV output:
$ hledger print -Ocsv
"txnidx","date","date2","status","code","description","comment","account","amount","commodity","credit","debit","posting-status","posting-comment"
"1","2008/01/01","","","","income","","assets:bank:checking","1","$","","1","",""
"1","2008/01/01","","","","income","","income:salary","-1","$","1","","",""
"2","2008/06/01","","","","gift","","assets:bank:checking","1","$","","1","",""
"2","2008/06/01","","","","gift","","income:gifts","-1","$","1","","",""
"3","2008/06/02","","","","save","","assets:bank:saving","1","$","","1","",""
"3","2008/06/02","","","","save","","assets:bank:checking","-1","$","1","","",""
"4","2008/06/03","","*","","eat & shop","","expenses:food","1","$","","1","",""
"4","2008/06/03","","*","","eat & shop","","expenses:supplies","1","$","","1","",""
"4","2008/06/03","","*","","eat & shop","","assets:cash","-2","$","2","","",""
"5","2008/12/31","","*","","pay off","","liabilities:debts","1","$","","1","",""
"5","2008/12/31","","*","","pay off","","assets:bank:checking","-1","$","1","","",""
- There is one CSV record per posting, with the parent transaction's
fields repeated.
- The "txnidx" (transaction index) field shows which postings belong
to the same transaction. (This number might change if transactions
are reordered within the file, files are parsed/included in a
different order, etc.)
- The amount is separated into "commodity" (the symbol) and "amount"
(numeric quantity) fields.
- The numeric amount is repeated in either the "credit" or "debit"
column, for convenience. (Those names are not accurate in the
accounting sense; it just puts negative amounts under credit and
zero or greater amounts under debit.)