如何将SQL调用传递到AWK脚本中以指示文件上的文本替换?

时间:2018-12-13 23:53:28

标签: bash sqlite awk gsub

我正在编写脚本来进行一些个人会计和预算编制。我敢肯定有更简单的方法可以做到这一点,但是我喜欢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在一行中找到供应商名称时,它将用类别和子类别替换信用卡分配的类别从我的数据库中。

任何建议或想法都将不胜感激。

0 个答案:

没有答案