Добавьте ведущий ноль к дате в файле, используя «sed» или «awk» - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть файл, который содержит дату в этом формате (меняется каждые несколько дней)

1/5/2016

Мне нужно добавить ноль к месяцу / дню, чтобы он выглядел одинаково для месяцев и дней с одной цифрой.

01/05/2016

Я нашел команду «sed» в сети, однако она добавляет только ноль к числу между «/», а не к первому числу. Любые рекомендации?

Это команда:

sed -e 'sx\([^0-9]\)\([0-9]/\)x\10\2xg' -e 'sx/\([0-9]/\)x/0\1xg' /path/to/your/file

1 Ответ

0 голосов
/ 08 ноября 2018

С точки зрения того, что вы делаете неправильно, ваша первая sed строфа будет работать только с датой, которой предшествует символ , а не цифра. Это означает, что он не будет работать с датами в начале строки, так как перед ним нет символа.

См. Следующую стенограмму:

pax$ echo "1/1/2001 1/1/2001" | sed -e 'sx\([^0-9]\)\([0-9]/\)x\10\2xg' -e 'sx/\([0-9]/\)x/0\1xg'
1/01/2001 01/01/2001

pax$ echo "_1/1/2001 1/1/2001" | sed -e 'sx\([^0-9]\)\([0-9]/\)x\10\2xg' -e 'sx/\([0-9]/\)x/0\1xg'
_01/01/2001 01/01/2001

Вы видите, что первая дата не изменяется правильно в первой команде, но изменяется во второй, потому что перед ней стоит символ.

Быстрое решение этой проблемы - просто добавить еще одно предложение для обработки этого случая начала строки:

-e 'sx^\([0-9]/\)x0\1xg'

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

pax$ echo "1/1/2001 1/1/2001" | sed -r -e 'sx([^0-9]|^)([0-9]/)x\10\2xg' -e 'sx/([0-9]/)x/0\1xg'
01/01/2001 01/01/2001

Это также позволяет вам избавиться от некоторых из этих уродливых обратных косых черт: -)

Конечно, если все ваши даты находятся в начале строки, или у вас есть одна дата в начале строки в однострочном файле (ваш первый абзац кажется , чтобы подразумевать это), становится лот проще:

pax$ echo "1/1/2001" | awk -F/ '{printf "%02d/%02d/%04d\n", $1, $2, $3}'
01/01/2001
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...