我正在编写脚本来进行一些个人会计和预算编制。我敢肯定有更简单的方法可以做到这一点,但是我喜欢UNIX之类的CLI应用程序,所以这就是我选择的方式。
当前,管道以AWK脚本开始,该脚本将我的CSV格式的信用卡对帐单转换为纯文本,并转换为CLI account program Ledger can read的两次输入记帐格式。然后,我可以通过Ledger进行任何我想要的报告。
这是我的AWK脚本当前状态:
#!/bin/bash
awk -F "," 'NR > 1 {
gsub("[0-9]*\.[0-9]$", "&0", $7)
gsub(",,", ",", $0)
print substr($2,7,4) "-" substr($2,1,2) "-" substr($2,4,2) " * " $5
print " Expenses:"$6" -"$7
print " Liabilities "$7"\n"
}' /path/to/my/file.txt
这是原始文件的模拟示例(数据组成,格式正确):
POSTED,08/22/2018,08/23/2018,1234,RALPH'S COFFEE SHOP,Dining,4.33,
POSTED,08/22/2018,08/24/2018,1234,THE STUFF STORE,Merchandise,4.71,
POSTED,08/22/2018,08/22/2018,1234,PAST DUE FEE,Fee,25.0,
POSTED,08/21/2018,08/22/2018,5678,RALPH'S PAGODA,Dining,35.0,
POSTED,08/21/2018,08/23/2018,5678,GASLAND,Gas/Automotive,42.38,
POSTED,08/20/2018,08/21/2018,1234,CLASSY WALLMART,Grocery,34.67,
以下是通过AWK脚本转换为分类帐格式后的相同条目:
2018-08-22 * RALPH'S COFFEE SHOP
Expenses:Dining -4.33
Liabilities 4.33
2018-08-22 * THE STUFF STORE
Expenses:Merchandise -4.71
Liabilities 4.71
2018-08-22 * PAST DUE FEE
Expenses:Fee -25.00
Liabilities 25.00
2018-08-21 * RALPH'S PAGODA
Expenses:Dining -35.00
Liabilities 35.00
2018-08-21 * GASLAND
Expenses:Gas/Automotive -42.38
Liabilities 42.38
2018-08-20 * CLASSY WALMART
Expenses:Grocery -34.67
Liabilities 34.67
分类帐可以对各种类别的支出和收入进行出色的报告。我的信用卡会自动为事物分配分配类别(例如,费用:天然气/汽车,费用:用餐等),但并非总是以反映所花费用的方式对它们进行分类。我还希望能够放入子类别,例如Expenses:Dining:Coffee。
为此,我创建了一个包含所需映射的SQLite数据库。这样的查询:
SELECT v.name, tlc.name, sc.name
FROM vender AS v
JOIN top_level_category AS tlc ON v.top_level_category_id = tlc.id
JOIN sub_category AS sc ON v.sub_category_id = sc.id;
将输出如下数据:
RALPH'S COFFEE SHOP, Dining, Coffee
我想找出一种将上述SQL查询传递到我的AWK脚本中的方式,当AWK在一行中找到供应商名称时,它将用类别和子类别替换信用卡分配的类别从我的数据库中。
任何建议或想法都将不胜感激。