You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在hledger日记账文本文件中右对齐金额

如何将账本文件中的金额右对齐到指定列?

需求:调整账本文件里金额(如123.00 EUR)前的空格,让金额右对齐到第53列。

原始文件内容

# 2018

; A comment



* Transactions

2018-01-01 @Payee | Internet
    expenses:communication:internet      123.00 EUR
    assets:cash:eur

2018-01-01 @Landlady | Rent
    expenses:housing:rent      321.00 EUR
    expenses:fees                2.50 EUR  ; Bank fee
    assets:bank:eur

期望输出

# 2018

; A comment



* Transactions

2018-01-01 @Payee | Internet
    expenses:communication:internet       123.00 EUR
    assets:cash:eur

2018-01-01 @Landlord | Rent
    expenses:housing:rent                 321.00 EUR
    expenses:fees                           2.50 EUR  ; Bank fee
    assets:bank:eur

解决方案:使用awk实现

可以用awk脚本识别包含金额的行,计算需要补充的空格数,重新格式化输出:

awk -v target_col=53 '
    /[0-9]+\.[0-9]+ [A-Z]+/ {
        # 拆分账户部分和金额及后续内容
        split($0, parts, /[ ]+([0-9]+\.[0-9]+ [A-Z]+)/)
        account = parts[1]
        rest = substr($0, length(account)+1)
        # 计算填充空格数,让金额起始位置对齐到目标列
        pad = target_col - length(account) - length(rest) + length(match(rest, /[0-9]+\.[0-9]+ [A-Z]+/))
        if (pad > 0) {
            printf "%s%*s%s\n", account, pad, "", rest
            next
        }
    }
    # 不匹配金额的行直接输出
    {print}
' input.txt > output.txt

脚本说明

  1. -v target_col=53:指定金额要右对齐到的目标列(此处为第53列)
  2. 正则/[0-9]+\.[0-9]+ [A-Z]+/匹配包含标准金额格式的行
  3. 拆分账户文本与金额及后续内容,计算需要补充的空格数量
  4. 通过printf格式化输出,补充空格让金额对齐到目标列
  5. 不包含金额的行保持原样输出

注意事项

  • 仅匹配数字.数字 大写货币代码格式的金额行
  • 若账户文本+金额的总长度已超过目标列,将保留原格式不调整
  • 执行后结果会写入output.txt,操作前建议备份原文件

内容的提问来源于stack exchange,提问作者Leeroy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:06:00