Переформатирование даты в штамп времени unix в таблице csv

Я вижу несколько способов:

  • если ваша файловая система, содержащая / home / foo, смонтирована с atime (или эквивалентным для типа вашей файловой системы) , затем вы можете использовать find / home / foo -atime +10 -ls , чтобы узнать, был ли доступ к каким-либо из его файлов менее чем за 11 дней

  • , или если вы предпочитаете «ткнуть» и посмотреть если прямо сейчас что-то доступно в этом каталоге: lsof | grep / home / foo должен дать вам некоторую подсказку (для проверки: cd / home / foo; lsof | grep / home / foo : должен по крайней мере выводить pid вашей оболочки, поскольку теперь он cwd (текущий рабочий каталог) по этому пути ...)

(примечание: я не могу сейчас протестировать оба, Linux под рукой нет ... но я думаю, что оба должны работать)

3
23.05.2017, 15:40
1 ответ

Хммм. Хорошо, это было некоторое время назад, но я думаю, что могу высказать предложение.

Я совершенно уверен, что переход в оболочку для вызова «даты» для каждой строки вашего файла может быть немного медленным, если у вас много строк.

Я собирался обратиться к сценарию, который написал для обработки записей в табеле учета рабочего времени, извлеченных из Календаря Google, и вывести некоторый HTML-код, чтобы затем преобразовать его в счет-фактуру в формате PDF. Но потом стало слишком долго говорить об этом. Так что я просто дам вам код, чтобы сэкономить на чтении.

Я использую функции AWK gensub и mktime [ https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html]. Функция mktime ожидает ввода в формате datespec «ГГГГ ММ ДД ЧЧ ММ СС [DST]», поэтому ваш ввод должен быть сдвинут относительно того, где вступает в действие функция gensub. Вот что у меня есть для вас...

awk -F';' -v OFS=';' '{ $1=mktime(gensub(/(..)\/(..)\/(....) (..):(..):(..)/, "\\3 \\1 \\2 \\4 \\5 \\6", 1, $1)); } 1' datetime.csv > unix.csv

Я бы сделал это немного по-другому и вывел бы отдельные аргументы в печать вместо того, чтобы возвращать первый аргумент. Немного больше самодокументирования -;)ТИМТОВТДИ

awk -F';' -v OFS=';' '{ print mktime(gensub(/(..)\/(..)\/(....) (..):(..):(..)/, "\\3 \\1 \\2 \\4 \\5 \\6", 1, $1)), $2, $3, $4; }' datetime.csv > unix.csv

Я знаю, что сценарий немного более подробный, но, надеюсь, более производительный.

Надеюсь, это поможет вам или кому-либо еще, кто ищет то же самое.

0
24.07.2020, 00:40

Теги

Похожие вопросы