Как передать SQL-вызов в сценарий AWK, чтобы продиктовать замену текста в файле? - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю над сценарием для ведения личного учета и составления бюджета.Я уверен, что есть более простой способ сделать это, но мне нравятся 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 находит имя поставщика в строке, он заменяет категорию, назначенную кредитной картой, на категорию и подкатегорию из моей базы данных.

Буду признателен за любые советы или мысли.

...