Преобразование столбца с использованием даты и добавление в файл 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 
  • Ограничить поиск мест в определенных каталогах
  • Могу ли я восстановить том HFS +, если файлы были нечитаемы после восстановления «Восстановление Easus Recovery»? Информация о Testdisk & Diskutil ниже
  • Виртуализация OS X для разработки программного обеспечения
  • Спящий режим и соображения безопасности
  • Исправление или альтернатива для mktemp в OS X
  • Как внести изменения в winetricks?
  • Как узнать, какие копии файла являются копиями COW?
  • Доступ к Macintosh HD от Ubuntu - отказ от прав доступа
  • Интернет в альпийском виртуальном боксе в macos
  • Есть ли способ уменьшить время загрузки xquartz на osx?
  • Могут ли (CUPS) файлы ppd для Mac OS X использоваться для Linux?
  • Linux и Unix - лучшая ОС в мире.