Я пытаюсь преобразовать HTML, содержащий таблицу в CSV-файл, используя сценарий bash
.Использовать sed или awk для определения формата даты
До сих пор я acomplished следующие шаги:
- Преобразование в формат Unix (с
dos2unix
) - Удалить все пробелы и табуляцию (с
sed 's/[ \t]//g'
) - Удалить все пустые строки (с
sed ':a;N;$!ba;s/\n//g'
) (это необходимо, потому что в файле HTML есть пустая строка для каждой ячейки таблицы ... это не моя ошибка) - Удалить ненужные
<td>
и<tr>
теги (сsed 's/<t.>//g'
) - Заменить
</td>
с '' (сsed 's/<\/td/,/g'
) - Заменить
</tr>
с отслуживших линии (\n
) символов (сsed 's/<\/tr/\n/g'
)
Конечно, я ставлю все это в трубопровод. Пока что он отлично работает. Есть один последний шаг, за которым я застрял: в таблице есть столбец с датами, который имеет формат dd/mm/yyyy
, и я хотел бы преобразовать их в yyyy-mm-dd
.
Есть ли (простой) способ сделать это (с sed
или awk
)?
образец данных (после всей sed
трубы):
500,2,13/09/2007,30000.00,12,B-1
501,2,15/09/2007,14000.00,8,B-2
Ожидаемый результат:
500,2,2007-09-13,30000.00,12,B-1
501,2,2007-09-15,14000.00,8,B-2
Причина мне нужно сделать это, потому что мне нужно импортировать эти данные к MySQL. Я могу открыть файл в Excel и изменить формат вручную, но я бы хотел пропустить это.
Приятная работа, но команда 'read' не будет работать, потому что' read' работает в _subshell_ в этом случае; используйте 'echo '08/26/2013 '| {IFS =/read m d y; echo "$ {y} - $ {m} - $ {d}"; } 'или ' IFS =/read m d y <<< '08/26/2013'; echo "$ {y} - $ {m} - $ {d}" ' – mklement0
@ mklement0 Ах, да ... забыл про эту мелочь. Однако он работал бы в 'ksh'. Другой альтернативой будет 'IFS =/read m d y <<(echo 08/26/2013)', чтобы избежать подоболочки (хотя 'echo' будет находиться в подоболочке). – twalberg
Хорошие моменты, хотя '<<<', вероятно, наиболее эффективен здесь. В Bash v4.2 + вы также можете использовать 'shopt -s lastpipe' (но только в скриптах). Могу ли я предложить вам обновить свой ответ одним из рабочих решений? – mklement0