Преобразование столбца в дату и добавление в файл csv

Просто заключите переменную в фигурные скобки:

echo -e "${Red}Note: blabla${NC}".

См. Дополнительные сведения о Расширении параметров .

См. Также отличный ответ Почему printf лучше, чем echo? , если вы заботитесь о переносимости.

0
01.02.2017, 13:46
2 ответа

У меня GNU date и, следовательно, параметры командной строки для меня другие. Но ваша проблема, похоже, связана с синтаксисом 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
2
29.04.2021, 00:05

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

К сожалению, ваш формат ввода не соответствует формату datepec , ожидаемому для 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
0
29.04.2021, 00:05

Теги

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