Мой банк отправляет нестандартный файл CSV, используя ;
в качестве разделителя полей и двоичный код (шестнадцатеричный a0
или восьмеричный 240
), чтобы заключить поля, в которых может возникнуть ;
, как показано ниже:
Ввод
Extrait;Date;Date valeur;Compte;Description;Montant;Devise
�2020/0001/0002�;29.02.2020;29.02.2020;-;�28/02/20 Some shop in Antwerp A Antwerpen (BE)�;-16,50;EUR
�2020/0001/0001�;01.02.2020;01.02.2020;-;�31/01/20 Some shop in Zaventem Z Zaventem (BE)�;-13,00;EUR
Мне нужно обработать поля 2, 5 и 6 с помощью AWK.
Требуемый вывод
{Date}{Description}{Montant}
{29.02.2020}{28/02/20 Some shop in Antwerp A Antwerpen (BE)}{-16,50}
{01.02.2020}{31/01/20 Some shop in Zaventem Z Zaventem (BE)}{-13,00}
До сих пор, пока поля, заключенные в �
, не содержат ;
приведенного ниже сценария с использованием переменной FPAT
работает:
#!/usr/bin/awk -f
BEGIN {
FS=";"
FPAT="[^;]*" # this works but not in all cases
#FPAT="([^;]*)|(\240[^\240]+\240)" # this doesn't work
}
{ gsub (/\240/, "", $5) # I wish I could skip this instruction too
print "{" $2 "}{" $5 "}{" $6 "}"
}
Я нашел похожий случай (см. awk FPAT, чтобы игнорировать запятые в csv ), но изменив ,
на ;
и \"
в \240
ничего не вышло.
Мне нужна помощь для реализации шаблона FPAT
для правильного сканирования моего CSV-файла во всех случаях.