【Symfoware]】SELECT結果をCSV形式に変換する
※solaris にて動作確認済み(1行20kの制限あり)
exportHead.awk
#! /usr/xpg4/bin/awk -f ### ############################################################ ### SymfowareのSELECT結果から項目名をCSV形式で抽出する ### (c) 2018 mikan ### ※使用にあたっては利用者の自己責任でお願いします。 ### ### 使い方: ### /usr/xpg4/bin/awk -f exportHead.awk in.log > out.txt ############################################################ !/^Number.*|^SQL.*|^[sS][eE][lL][eE][cC][tT].*/ { FS = ":"; gsub(" ",""); i ++; if($1 ~ /^<</) { if(i>1) exit else continue }else{ j ++; if (j==1) printf $1 else printf ","$1 } }END EOF{print ""}
export.awk
#! /usr/xpg4/bin/awk -f ############################################################ ### SymfowareのSELECT結果からデータをCSV形式で抽出する ### (c) 2018 mikan ### ※使用にあたっては利用者の自己責任でお願いします。 ### ### 使い方: ### /usr/xpg4/bin/awk -f export.awk in.log > out.log ### ### 参考: ### パターン一致書式 $1 ~ / パターン / ### パターン不一致書式 $1 ~ !/ パターン / ############################################################ BEGIN { } # 先頭文字が"SQL","Number","select"以外の行を処理する !/^SQL|^Number|^[sS][eE][lL][eE][cC][tT]/ { FS=":"; ### 区切り文字設定 #----- "<<"判定 cnt++ if($1~/^<</) { cnt=0 } #----- 1データ終了判定 if(cnt == 0) { #----- 初回(2行目)の"<<"は改行しない if(NR>2) { #----- 改行出力 printf("\n") } continue } #----- データ部にコロンがある場合の対応 $X=$2,$3,$4... for(X=2; X<=NF; X++) { #----- 数値タイプはダブルコーテーション不要 if ($2~/^([+-])([0-9]*\..*)/) { #----- カンマ出力判定 if(X == 2 && cnt == 1) { } else if(X == 2) { printf(",") } } #----- ダブルコーテーション(開始)出力 else { #----- カンマ出力判定 if(X == 2 && cnt == 1) { printf("\"") } else if(X == 2) { printf(",\"") } } #----- データ内のコロン出力 if(X >=3) { printf(":") } #----- データ出力 printf("%s", $X) } if ($2~/^([+-])([0-9]*\..*)/) { #----- 数値タイプはダブルコーテーション不要 } else { #----- ダブルコーテーション(終了)出力 if(cnt > 0) { printf("\""); } } } END { #----- 改行出力(最終行) printf("\n") } LogCnv.sh >|sh| #!/usr/bin/bash ############################################################ ### SELECT結果をCSV形式に変換 ### (c) 2018 mikan ### ※使用にあたっては利用者の自己責任でお願いします。 ### ### 使い方: ### csv_convert.sh in.log out.txt ############################################################ /usr/xpg4/bin/awk -f ./exportHead.awk $1 > $2 /usr/xpg4/bin/awk -f ./export.awk $1 >> $2 exit 0