Мой файл выглядит так:
ID,DATE,NAME
1,10-17-18,John
2,10-12-18,Mary
3,10-19-18,David
И я хочу, чтобы это выглядело так:
1,2018-10-17,John
2,2018-10-12,Mary
3,2018-10-19,David
Как я могу это сделать в bash?
Спасибо!
Вы пытались?
Мне нужно решение, которое не изменяет строку за строкой, потому что у меня более 90 тысяч строк. Мне нужно что-то изменить всю колонку.
Звучит как вопрос домашнего задания ... Как мне задавать домашние вопросы на Stack Overflow. Ожидается, что вы приложите усилия.
Разделить символом "," -F','
.
Пропустить первую строку (NR>1)
.
Заменить - в строке даты на /, gsub(/-/,"/",$2)
, чтобы дата распознала формат
как месяц / день / год.
Преобразуйте формат даты, сохраните как переменную d ("date +%Y-%m-%d -d"$2 | getline d)
.
Затем выведите каждое поле через запятую.
awk -F',' '(NR>1){gsub(/-/,"/",$2); ("date +%Y-%m-%d -d"$2 | getline d); print $1","d","$3}' file
Чтобы пропустить строки с пустыми датами, добавьте if ($2= = "") next;
в начале, например:
awk -F',' '(NR>1){if ($2= = "") next; gsub(/-/,"/",$2); ("date +%Y-%m-%d -d"$2 | getline d); print $1","d","$3}' file
Это сработало, но для параметра: date: требуется аргумент - 'd' Попробуйте 'date --help' для получения дополнительной информации.
Вероятно, это означает, что одна из строк имеет пустое значение в столбце 2.
Как я могу игнорировать пустые значения в столбце 2, но продолжать преобразование?
См. Редактировать.