Eu escreveria:
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
Eu tenho um arquivo que contém data e hora e data na segunda coluna. Se a linha contiver uma das palavras, então deverá ser substituída como abaixo.
File:
a smallint
b timestamp
c date
d varchar
O/P:
a smallint
dateformat(b,'YYYY-MM-DD HH:NN:SS.sss')
dateformat(c.'YYYY-MM-DD')
d varchar
Se eu executar este comando abaixo como um único awk, então eu estou recebendo a saída, mas se eu usar outra condição, então eu estou recebendo erro.
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
Erro:
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)" }
awk: ^ syntax error
Deixe-me envolver as linhas no seu comando primeiro:
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
Portanto, dois problemas, um é que a cláusula else
não está alinhada com a cláusula if
(há um comando print
fora dela) e a segunda é que a cláusula else
não é necessária uma condição, você deseja usar else if
.
Então talvez isso seja o que se pretendia?
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
Também não tenho certeza do que você quer fazer sobre as outras linhas que não correspondem ... Você pode adicionar um else
ao final que faz um simples print
(o padrão é imprimir a linha não modificada) ou talvez um print
de campos específicos.
Por favor, note que a formatação é útil para ver como seus blocos se aninham! Esta é uma sintaxe perfeitamente válida, o shell usa várias strings com aspas simples e o awk também ficará muito feliz com elas. Eu recomendo que você use essa formatação mais legível de seus scripts awk.
Tags shell shell-script