Когда вы попытаетесь сделать отступ в своем коде (в awk
вы можете использовать символы новой строки между одинарными кавычками), вы увидите, что у вас есть print
перед else
.
awk '{
if ($2=="timestamp") {
$3="dataformat(";
};
print $3 $1 ",'\''YYYY-MM-DD HH'\:'NN'\:'SS'\.'sss)"
else
($2=="date") {
$3="dataformat(";
};
print $3 $1 ",'\''YYYY-MM-DD)"
}' test.out
Этот код можно «исправить» с помощью
awk '{
if ($2=="timestamp") {
$3="dataformat(";
print $3 $1 ",'\''YYYY-MM-DD HH'\:'NN'\:'SS'\.'sss)"
}
if ($2=="date") {
$3="dataformat(";
print $3 $1 ",'\''YYYY-MM-DD)"
}
}' test.out
Вы видите, что вам не нужно выражение else.Теперь появляются новые проблемы.Вы не должны использовать $3
для переменной, просто создайте новую.
Переменные можно установить в качестве параметра awk, в разделе BEGIN {} или в обычном потоке.
Я бы использовал параметрыдля переменных с одинарной кавычкой.Я также представил startvar
и othervar
, просто чтобы показать, как они работают.
awk -v ymd="'YYYY-MM-DD'" \
-v dt="'YYYY-MM-DD HH:NN:SS.sss'" \
'
BEGIN {
startvar="Example variable"
}
$2=="timestamp" {
printf("%s, dateformat(%s)\n", $1, ymd);
othervar=startvar" expanded";
print othervar;
}
$2=="date" {
printf("%s, dateformat(%s)\n", $1, dt);
}
' test.out
Без демонстрационной части с дополнительными переменными и удалением некоторых строк новой строки вы получите
awk -v ymd="'YYYY-MM-DD'" -v dt="'YYYY-MM-DD HH:NN:SS.sss'" '
$2=="timestamp" { printf("%s, dateformat(%s)\n", $1, ymd); }
$2=="date" { printf("%s, dateformat(%s)\n", $1, dt); }
' test.out