2016-12-29 3 views
1

с помощью awk, я хочу, чтобы отфильтровать строки с их отметкой времениКак вывести список, соответствующий их метке времени, используя awk?

Я попытался

awk '/29/Dec/2016-07:52/' filename 

но это дает ошибку

AWK:/29/декабрь/2016-07: 52/

AWK: ошибка^синтаксис

как вынуть список, соответствующий их метке?

+2

Вы должны избегать '/' в дате, например: '/ 29 \/Dec \/2016-07: 52 /'. –

ответ

1

Это потому, что / используется в качестве разделителя, так что вам нужно, чтобы избежать его:

awk '/29\/Dec\/2016-07:52/' filename 

В качестве альтернативы, если вы не хотите, чтобы беспокоиться о побеге, вы можете использовать другой вариант:

awk '$0 ~ "29/Dec/2016-07:52"' filename 

конечно, если вы просто после удаления строк, содержащих эти строки, awk вероятно, слишком много - вы можете сделать это с grep:

grep -F '29/Dec/2016-07:52' filename 
+0

Просто хотел добавить здесь в ответе paxdiablo здесь «/», имеющее особое значение, поэтому нам нужно использовать escape-последовательность, чтобы рассказать awk, которые не считают особым смыслом, что мы ищем один и тот же символ »/« не для этого особого значения. – RavinderSingh13

+1

Этот второй вариант не является нерегексом, он просто использует динамическое регулярное выражение, а не постоянное регулярное выражение. Вариантом non-regexp будет индекс 'awk '($ 0," 29/Dec/2016-07: 52 ")' filename'. Также '/' является константным регулярным выражением, а не разделителем. –

+1

@EdMorton, спасибо за комментарии, скорректировал ответ в соответствии. – paxdiablo