ファイルの内容に応じて単語を変更する

ファイルの内容に応じて単語を変更する

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

おすすめ記事