Включение метки времени в команду awk

Сопоставления заголовка недостаточно, так как сообщения могут иметь другой адрес Кому, чем адрес получателя конверта. См.http://www.linuxmail.info/postfix-restrict-sender-recipient/для некоторых советов по отклонению почты на основе адреса получателя. Другим решением может быть полное удаление адреса получателя, конечно, вы не можете этого сделать, если содержимое почтового ящика все еще необходимо, и вы планируете повторно активировать адрес в будущем.

0
04.11.2019, 15:13
3 ответа

Объединение двух команд awk(и командыsed):

awk -F ';' '
    x == 1 {
        gsub("[:,-]", "")
        tspec = sprintf("%4d %.2d %.2d 00 00 00", substr($1,1,4), substr($1,5,2), substr($1,7,4))
        t = mktime(tspec)
        print $1, $2, $3, $4, 0 + strftime("%j", t)
    }
    /Date/ { x = 1 }' file

Это предполагает, что вы используете GNU awkили mawk(, а не BSD awk, которые могут не реализовывать mktime()илиstrftime()).

Код объединяет две команды awkиsed(с использованием gsub()), и я также взял на себя смелость исправить синтаксический анализ даты для установки tspec.

Учитывая файл,

...
...
Date;Time;Airtemp;Quality;;Other info
1961-01-01;06:00:00;0.4;G;;...
1961-01-01;12:00:00;2.3;G;;...
1961-01-01;18:00:00;...;.;;...
1961-01-02;15:00:00;...;.
2015-09-01;........;...;.

это даст

19610101 060000 0.4 G 1
19610101 120000 2.3 G 1
19610101 180000.... 1
19610102 150000.... 2
20150901............ 244

Обратите внимание, что пробел является разделителем полей вывода по умолчанию (OFS), поэтому, если вы не задаете OFSчто-либо явно, вы (не должны )выводить пробелы, используя " "между каждым полем вывода.

0
28.01.2020, 03:09

На этот вопрос сложно ответить, поскольку вы не показываете нам реальных данных. Но, если я правильно вас понял, вам вообще не нужно учитывать метку времени. в зависимости от желаемого результата вы просто хотите удалить -и :из ввода и добавить дополнительный столбец:

$ awk -F';' '{day=substr($1,9,2); gsub(/[:-]/,""); printf "%s;%.1d\n",$0,day}' file
19610101;060000;0.4;G;...;1
19610101;120000;2.3;G;...;1
19610101;180000;...;.;1
19610102;150000;...;.  ;2
..........;........;...;.;0
20150901;........;...;.;1

Или, если вы хотите, чтобы вкладки -разделяли столбцы, как вы показываете (, я думаю )в желаемом выводе:

 $ awk -F';' -vOFS="\t" '{day=substr($1,9,2); gsub(/[:-]/,""); print $1,$2,$3,$4, sprintf("%.1d",day)}' file
19610101    060000  0.4 G   1
19610101    120000  2.3 G   1
19610101    180000 ....   1
19610102    150000 ....   2
.......... ........   ....   0
20150901   ........   ....   1
0
28.01.2020, 03:09

Попробуйте изменить $4 на $5, чтобы показать день года

{print $1 " " $2 " " $3 " " $4}

0
28.01.2020, 03:09

Теги

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