Awk - фильтровать только даты определенного формата из текстового файла - PullRequest
0 голосов
/ 02 марта 2019

У меня есть файл .txt с множеством строк текста на macOS.Я хотел бы отфильтровать только даты и сохранить их в порядке появления построчно в новом текстовом файле.

Однако меня не интересуют все даты, только те, которые заполнены и выглядят как02/03/2019, и те, где число дней меньше 13, то есть 01 ... 12.

Затем я хотел бы удалить те даты, где число для дня и месяца являетсято же самое, что 01/01/2019 и 02/02/2019 и т. д.

Как этого добиться с помощью awk или аналогичного программного обеспечения в bash?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Удаление дат внутри текстового файла

Следующая команда удалит все даты формы aa/bb/cccc, где aa = bb <13. Исходный файл будетскопировать в <code>yourFile.txt.bak в качестве резервной копии, и новый текст с удаленными датами заменит старый файл.

sed -E -i.bak 's:\b(0[0-9]|1[0-2])/\1/[0-9]{4}\b::g' yourFile.txt

Если вы хотите вставить что-то вместо того, чтобы просто удалить даты, вы можете сделать это, написавзамена между двумя ::.Например, sed … 's:…:deleted date:/g' … заменит каждую соответствующую дату текстом deleted date.

. Обратите внимание, что для вашего критерия не имеет значения, является ли формат даты dd/mm/yyyy или mm/dd/yyyy, посколькуВас интересуют только даты, когда dd и mm равны.

Извлечение определенных дат из текстового файла

Если вы не хотите удалять, а только извлекатьконкретные даты, указанные в вашем комментарии, вы можете использовать следующую команду:

grep -Eo '\b([0-9]{2}/){2}[0-9]{4}\b' yourFile.txt | awk -F/ '$1<13 && $1!=$2'

Это извлечет все даты в формате dd/mm/yyyy (!) , где mmdd <13. Даты печатаются в порядке появления на стандартном экране.Если вы хотите сохранить их в файл, добавьте <code>> yourOutputFile.txt в конец команды.

0 голосов
/ 02 марта 2019

Если Perl является выбором:

perl -ne 'print if m:(\d\d)/(\d\d)/(\d\d\d\d): && $1 < 13 && $1 != $2' dates.txt >newdates.txt

это предполагает этот формат /dd/mm/yyyy

Обратите внимание, что я использую нотацию m: : вместообычно / / для сопоставления регулярных выражений.Таким образом, мне не нужно избегать / косых черт в дате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...