Я обрабатываю большой файл mbox, чтобы проанализировать почтовый трафик info@acme.com. Файл уже в CSV с 11 столбцами. Количество необходимых замен большое (> 25), и оно прекрасно работает с функцией àwk gsub`. Но я только что понял, что замена должна выполняться только для столбцов $ 3, $ 7 и $ 9, и я хотел бы найти оптимальное решение для этого.
CSV-файл с разделителями;Между разделителями может появиться новая строка. Обычно символ новой строки внутри поля обозначается ?=
в конце строки и =?
в начале следующей строки, например, это строка заголовков, пустая строка и одна строка данных:
Message-ID;X-GM-THRID;X-Gmail-Labels;X-Google-Original-Date;Date;From;To;Subject;X-Spam-Flag;HasAttachment;AttachmentNames
<01a201d59317$3457d540$9d077fc0$@sbb.us>;1649279601489016232;"=?UTF-8?Q?Archived,Important,Opened,Category_?=
=?UTF-8?Q?Personal,kupci/cb-ac,naro=C4=8Dila-kupcev?=";;Mon, 4 Nov 2019 14:53:14 +0100;<bill.zeit@fgr.us>;=?iso-8859-2?Q?acme_naro=E8ilo?= <info@acme.us>;=?iso-8859-2?Q?NARO=C8ILO_7209661?=;;True;ACME 7096_2019.pdf
Моя задача - очистить данные. В частности, строка выше должна выглядеть так:
Message-ID;X-GM-THRID;X-Gmail-Labels;X-Google-Original-Date;Date;From;To;Subject;X-Spam-Flag;HasAttachment;AttachmentNames
01a201d59317$3457d540$9d077fc0$@sbb.us;1649279601489016232;Archived,Important,Opened,Category Personal,kupci/cb-ac,naročila-kupcev;;Mon, 4 Nov 2019 14:53:14 +0100;bill.zeit@fgr.us;acme naročilo info@acme.us;NAROČILO 7209661;;True;ACME 7096 2019.pdf
В настоящее время я запускаю команду:
awk -f replacements.awk email.csv > newEmail.csv
Файл replacements.awk выглядит следующим образом:
{
gsub("_"," ");
gsub("20="," ");
gsub("=?","");
gsub(/\?=/,"");
gsub("_"," ");
gsub("<","");
gsub(">","");
gsub(/"/,"");
...
print
}
Мне бы хотелось, чтобы файл replacements.awk был написан так, чтобы мне не нужно было повторять операторы gsub три раза, чтобы заменить строки на три столбца.
Спасибо