Преобразование столбца с использованием даты и добавление в файл csv

У меня есть CSV, где в первом столбце есть строка, которая представляет дату и время. Я хотел бы добавить дополнительную колонку с тем, что datetime преобразуется в эпоху.
Я попробовал следующее:

awk -F "," 'BEGIN{ OFS="," } {$14=$(date -jf "%m/%d/%Y %H:%M:%S %p" $1 "+%s"); print}' mycsv.csv > test 

Я получил:

 awk: illegal field $(0%m/%d/%Y %H:%M:%S %p"1/30/2017 11:14:55 AM"+%s), name "(null)" input record number 1, file mycsv.csv source line number 1 

Я знаю, что преобразование даты для поля работает, поэтому я делаю что-то неправильно с синтаксисом.
Как я могу делать то, что хочу?

2 Solutions collect form web for “Преобразование столбца с использованием даты и добавление в файл csv”

У меня есть date GNU, поэтому параметры командной строки для меня разные. Но ваша проблема кажется синтаксисом awk: вы не можете использовать конструкцию подпроцесса оболочки $(...) внутри awk-скриптов. Вам понадобится функция system() , которая получает строку. Поэтому вам нужно построить допустимую команду оболочки в строку awk, которую вы можете передать системе внутри скрипта awk.

Что-то вроде этого:

 awk -F "," 'BEGIN{ OFS="," } {$14=system("date -jf \"%m/%d/%Y %H:%M:%S %p\" \""$1"\" \"+%s\""); print}' mycsv.csv > test 

или для лучшей удобочитаемости

 awk -F "," ' BEGIN{ OFS="," } { $14 = system("date -jf \"%m/%d/%Y %H:%M:%S %p\" \"" $1 "\" \"+%s\""); print }' \ mycsv.csv > test 

Если у вас есть GNU awk (который, как мне кажется, должен быть доступен на OSX с помощью brew ), вы можете использовать внутренние mktime и strftime вместо того, чтобы полагаться на системную date .

К сожалению, ваш формат ввода не находится в формате дат , ожидаемого mktime , поэтому требуется некоторое разделение и переформатирование временной строки. Например, данный

 $ cat file.csv 09/23/2016 11:12:19 AM,field2,field3 

тогда

 gawk -F, ' { split($1,a,/[/: ]/); ts = sprintf("%4d %02d %02d %2d %2d %2d", a[3], a[2], a[1], a[7] ~ /^[Pp]/ ? a[4]+12 : a[4], a[5], a[6]); $0 = strftime("%s", mktime(ts)) FS $0 } 1' file.csv 1510243939,09/23/2016 11:12:19 AM,field2,field3 
  • pf, alf, kext порядок работы в os x
  • Как принудительно удалить все разделы и удалить диск из терминала?
  • Установка инструментов командной строки Xcode, командной строки
  • Установка Ruby на Mac OS X
  • Получение g ++ для работы на Mac с Xcode
  • ZSH для автоматического заполнения каталогов в аргументах командной строки?
  • Обычно скрипт работает, но не с cron
  • Поиск источника и источника копирования для плоской цели
  • IPSec VPN Debian Squeeze Server для Mac OS X
  • не удалось открыть openmpi? Терминал / OSX 10.9.1
  • «Не обычный файл» при попытке просмотреть файл .gitignore
  • Как постоянно менять цвет STDOUT и STDERR на серый?
  • Interesting Posts

    Как отлаживать Linux?

    Потеря пакетов с пакетами ошибок RX

    Предоставление временной метки для каждой строки вывода из команды

    Как использовать закрытый ключ для настройки без пароля ssh на новом компьютере

    Как получить дисковое пространство (Свободно) с помощью «df -h», когда файловая система длинная

    Запуск 'bash -i> & / dev / tcp / HOST / PORT 0> & 1' в фоновом режиме

    Исполняемый файл, находящийся в местоположении A, как запустить его в местоположении B?

    Gnome3: как добавить дополнительные параметры поиска

    Почему df и Finder показывают различное доступное дисковое пространство?

    Получение подстрок между разделителями несколько раз из одной строки без цикла

    Не удалось загрузить как анонимный пользователь в vsftpd

    Почему GParted перечисляет пустое поле с использованием 43,90 ГБ?

    Звуковые события в Gnome 3

    Linux: установить дату через командную строку

    Как заставить Konqueror быть файловым менеджером по умолчанию?

    Linux и Unix - лучшая ОС в мире.