Запрос захватывает ненужные логи

Задача, из файла main.txt перенести все логи с ошибкой 500 в файл 500.txt(в main.txt так же находятся ошибки с кодом 400). Делаю запрос в консоли grep "3[01]/12/2019:21:3" main.txt | grep '500' > ~/bug1/events/500.txt. После, посмотрев в файл 500.txt внутри обнаруживаются логи с ошибкой 400. Вопрос: почему так и что нужно поменять в запросе чтобы захватывались ТОЛЬКО ошибки с кодом 500?

Пример лога из файла 400.txt.

80.57.170.51 - - [30/12/2019:21:35:12 +0000] "DELETE /users HTTP/1.1" 400 3623
204.235.176.118 - - [30/12/2019:21:35:13 +0000] "POST /users HTTP/1.1" 400 4704
82.95.203.67 - - [30/12/2019:21:35:19 +0000] "DELETE /lists HTTP/1.1" 400 3737

Пример лога из файла 500.txt.

65.47.42.12 - - [30/12/2019:21:37:39 +0000] "PATCH /customers HTTP/1.1" 400 2500
64.250.112.189 - - [30/12/2019:21:35:13 +0000] "PUT /parsers HTTP/1.1" 500 4639
193.253.101.180 - - [30/12/2019:21:35:31 +0000] "PATCH /alerts HTTP/1.1" 500 2944

Ответы (1 шт):

Автор решения: Zt.
awk '/3[01]\/12\/2019:21:3/ && $(NF-1) == 500' main.txt > 500.txt
→ Ссылка