Просто заключите переменную в фигурные скобки:
echo -e "${Red}Note: blabla${NC}".
См. Дополнительные сведения о Расширении параметров .
См. Также отличный ответ Почему printf лучше, чем echo? , если вы заботитесь о переносимости.
У меня 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
Если у вас есть 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