Я работаю над сценарием для ведения личного учета и составления бюджета.Я уверен, что есть более простой способ сделать это, но мне нравятся UNI-подобные CLI-приложения, поэтому я выбрал именно это.
В настоящее время конвейер начинается с сценария AWK, которыйпреобразует мою выписку по кредитной карте в формате CSV в обычный текст в формат учета с двумя записями, который Ledger программы учета CLI может читать .Затем я могу делать любые отчеты с помощью 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,
Вот те же записи после преобразования в формат Ledger с помощью скрипта 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
Ledger может создавать всевозможные классные отчеты оразличные категории расходов и заработков.Моя кредитная карта автоматически присваивает категории вещей (например, расходы: бензин / автомобили, расходы: питание и т. Д.), Но они не всегда классифицируются таким образом, чтобы отражать расходы.Я также хочу иметь возможность размещать в подкатегориях, таких как Расходы: Питание: Кофе.
Для этого я создал базу данных 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 находит имя поставщика в строке, он заменяет категорию, назначенную кредитной картой, на категорию и подкатегорию из моей базы данных.
Буду признателен за любые советы или мысли.