скрипт для преобразования даты (месяц_имя ДД, ГГГГ) в (ГГГГ-ММ-ДД) - PullRequest
2 голосов
/ 14 января 2011

У меня есть текстовый файл с датами в форме: «date = месяц_имя ДД, ГГГГ» и «дата = (месяц_имя ДД, ГГГГ)»

Как можно преобразовать эти даты, чтобы они были вform: "date = YYYY-MM-DD"?

У меня также есть несколько дат, которым предшествует имя поля "accessdate =" или нет имени поля, которые я хотел бы преобразовать.

Спасибо.

ADDENDUM:

  • Названия месяцев - это полные английские названия месяцев, например, январь, февраль и т. Д.
  • Я хочу преобразовать только датывнутри тегов ref, т.е. они будут окружены другим текстом внутри <ref></ref>'
  • Я открыт для любого языка для написания сценариев.Я сделал немного Bash, Javascript и Python.Но я думаю, что awk, sed, perl и т. Д. Тоже подойдут.Пояснения код будет приветствоваться.

Ответы [ 2 ]

0 голосов
/ 14 января 2011

Зависит от используемого вами инструмента.

Например, с помощью awk & sed вы можете сделать что-то вроде этого:

 awk '{
        /date=(?Jan/ {print "s/\\(.\\+\\)date=(\\?month_name \\(\\d\\d\\), \\(\\d\\d\\d\\d\\))\\?\\(\.\\+\\)$/\\1date=\\3-01-\\2\\4"}
        /date=(?Feb/ {print "s/\\(.\\+\\)date=(\\?month_name \\(\\d\\d\\), \\(\\d\\d\\d\\d\\))\\?\\(\.\\+\\)$/\\1date=\\3-02-\\2\\4"}
        /date=(?Mar/ {print "s/\\(.\\+\\)date=(\\?month_name \\(\\d\\d\\), \\(\\d\\d\\d\\d\\))\\?\\(\.\\+\\)$/\\1date=\\3-03-\\2\\4"}
        # ...
}' INPUT_FILE > tmp.sed

Затем вы можете сделать

sed -i.ORIG -f tmp.sed INPUT_FILE

Или вы можете написать это в чистом awk, анализируя $ 0.

0 голосов
/ 14 января 2011

Вы можете начать с

echo 'date=April 13, 1985' | sed -e 's/January/01/' ... \
        -e 's/April/04/' ... -e 's/December/12/' | \
    sed 's/\([0-9]*\)[^0-9]\([0-9]*\)[^0-9] \([0-9]*\)$/\1-\2-\3/'

Для обработки "date = (имя_месяца ДД, ГГГГ)" вы также можете добавить sed 's/date=(\([^(]*\))/date=\1/' в канал и т.добавление к нему.Sed будет недостаточно для работы с тегом <ref></ref>, если он занимает более одной строки.Таким образом, вы должны использовать что-то более мощное.Например, Python.

re.search() может использоваться для поиска <ref> и соответствующего </ref>.Затем re.match() можно использовать для преобразования того, что внутри, с помощью регулярных выражений, подобных тем, которые используются в sed.Этот алгоритм должен быть заключен в цикл while, чтобы пройти весь документ.

...