mv `cat /tmp/list.txt` /app/dest/
(пробелы в начале игнорируются)
Позвольте мне сначала обернуть строки в вашей команде:
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
Итак, здесь две проблемы: первая заключается в том, что пункт else
не соответствует пункту if
(, вне него находится команда print
), а второй заключается в том, что пункт else
не принимает условия, вместо этого вы хотите использовать else if
.
Так может быть, это и было задумано?
awk '
{
if ($2=="timestamp") {
$3="dataformat("
print $3 $1 ",'\''YYYY-MM-DD HH'\:'NN'\:'SS'\.'sss)"
} else if ($2=="date") {
$3="dataformat("
print $3 $1 ",'\''YYYY-MM-DD)"
}
}
' test.out
Также не уверен, что вы хотите сделать с другими строками, которые не совпадают... Вы можете добавить else
в конец, который делает простоеprint
(по умолчанию для печати неизмененной строки )или может быть print
конкретных полей.
Обратите внимание, что форматирование помогает увидеть, как вложены блоки! Это совершенно допустимый синтаксис, оболочка прекрасно принимает многострочные -строчные одинарные -строки в кавычках, и awk также будет вполне доволен ими. Я рекомендую вам использовать более читаемое форматирование ваших awk-скриптов.
Я бы написал:
awk -v q="'" '
$2 == "timestamp" { $0 = sprintf("dateformat(%s, "q"YYYY-MM-DD HH:NN:SS.sss"q")", $1) }
$2 == "date" { $0 = sprintf("dateformat(%s, "q"YYYY-MM-DD"q")", $1) }
{ print }
' file