Когда exFAT появится в Linux? [закрыто]

Вы были на правильном пути, применив awk. Вы должны написать скрипт, который читает ваши журналы и выводит их с полями, разделенными табуляцией¹. Затем используйте команду column, чтобы повторно выровнять столбцы:

extract.awk²:

BEGIN {OFS="\t"; print "Timestamp\tEmailTo:\tEmailFrom:\tIPAddress:\tErrorCodes:"}
{print $1, $6, $7, $NF, $(NF-5)}

Затем запустите его с помощью этой команды:

awk -f extract.awk logs | column -t -s '^I'

Где этот '^ I' представляет собой фактическую вкладку в кавычках .

Единственная сложная часть заключалась в работе с сообщениями об ошибках в журналах, которые могли быть переменным количеством слов. Я решил это, подсчитав столбцы справа для полей IP и кода ошибки.

Вот как выглядел результат:

Timestamp   EmailTo:         EmailFrom:                      IPAddress:   ErrorCodes:
2016-06-19  saadia@aol.com   (fahad@manakintextiles.com)     36.23.21.11  554-
2016-06-20  saadia@aol.com   (ranasohail@makintextiles.com)  36.23.21.14  554-
2016-06-20  otck@aol.com     F=<info@alhadeed.com>           36.23.21.11  421
2016-06-20  awaq313@aol.com  F=<anno@tekstilworks.co.uk>     36.23.21.14  421

Возможно, я неправильно догадался о входных столбцах, поскольку вы не указали, какие из них были, и если вы хотите очистить адреса электронной почты в третьем столбце, вы можете быть слишком глубоко для awk, и пора подумать об использовании Python или Perl.


¹ или с разделителем вывода по вашему выбору, если он не будет ни в одном из данных. Затем просто используйте это как аргумент -s для столбца .

²Как указывает @Kusalananda, нет смысла писать awk-скрипт как однострочник. Вот его версия:

BEGIN   {
    OFS="\t";
    print "Timestamp\tEmailTo:\tEmailFrom:\tIPAddress:\tErrorCodes:";
}

{
    print $1, $6, $7, $NF, $(NF-5);
}

Мне нравится однострочник.

10
02.09.2011, 20:40
0 ответов

Теги

Похожие вопросы