2番目の列には、タイムスタンプと日付を含むファイルがあります。行にこれらの単語のいずれかが含まれている場合は、次のように置き換える必要があります。
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
以下のコマンドを単一のawkとして実行すると出力が表示されますが、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)" else ($2=="date") {$3="dataformat("; }; print $3 $1 ",'YYYY-MM-DD)" }
awk: ^ syntax error
ベストアンサー1
私は次のように書くでしょう:
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