AWK初心者です。
Linux 7.3
※前回に続き、お教え下さい。
改行された以下のファイル(num.txt)があります。
productA
productB
productC
productD
productE
このファイルをAWKスクリプトから読込み、SQLの変数に代入、実行後、productX.rptとして、出力したいのですが、「parse error」となります。
自作では、下記のようになりましたが、希望する結果には程遠いです。
修正点等、アドバイスを宜しくお願いします。
-自作-
awk '{ name[FNR] = $0;}
{ for(i = 1; i <= FNR; i++)
{
echo "----- TEST -----"
selectfile "SELECT BID FROM BOX WHERE BOX.PRO_NAME like \"$name[i]\" " $name[i].rpt
}
}
' num.txt
-希望結果-
「productA」から「productE」毎にSQLを実行し、
その結果を同名の「productA.rpt」から「productE.rpt」ファイルを生成したい。
以上、宜しくお願いします。
No.1
- 回答日時:
もしかしたら私がしらないだけかもしれませんが
>selectfile "SELECT BID FROM BOX WHERE BOX.PRO_NAME like \"$name[i]\" " $name[i].rpt
このselectfileって何でしょうか?
一般的なawkには無いと思うのですが、何か特別なawkではこういう風に記述すると正常に動作してくれものなのでしょうか?
検索しましたがselectfileというものが使用出来るawkが見つからなかったもので。。。
No.2ベストアンサー
- 回答日時:
自作されたソースは、どういう思想で作られたかわからなかったので、「-希望結果-」に
なるように書いてみました。
自作のものは、one linerで書かれていますが、おそらく、one linerで書くのは難しいと
思います。
こちらで使ったDBMSは、PostgrSQLです。
---psql.awk---
{
print "SELECT BID FROM BOX WHERE BOX.PRO_NAME like " $0 > "psql.txt" # 1)
cmd = "psql -e -f psql.txt -U " USER " " DB # ※
print "--- " $0 ".rpt ---" > $0 ".rpt" # 2)
while( cmd | getline buffer) { # 3)
print buffer >> $0 ".rpt" # 4)
}
close(cmd)
}
gawk -f psql.awk -v USER=ユーザ名 -v DB=データベース名 num.txt
で動くと思います。
(パイプラインのWarningが出るかも知れませんが、結果に影響はありません。)
手法としては、awkとDBコマンドは直接連携できないので、
1)一旦SQL文を、awk上から一時ファイルに書き出す。(psql.txtがそれです)
2)レポートファイル毎のタイトルを、出力ファイルに書き出す
3)1)で作ったSQL文のファイルをSQLコマンドラインインタプリターに渡し、その
結果をパイブラインで一行づつ読み込む
4)3)で読み込んだ一行を結果ファイルに出力する。
(説明とコメントの番号は、一致させました)
* ユーザ名とデータベース名は外部から与えられる形にしました。
-v 変数名=変数値をawkのコマンドラインで渡すと、変数名がawkスクリプトの中で
有効になります。
※ PostgreSQL以外のDBMSの場合は、SQLコマンドラインインタプリターの
パラメータに合わせて、※の箇所を修正してください。
例:sqlplus ユーザ名/パスワード@接続識別文字列 @SQL文ファイル名(.sql)
(Oracle SQL*Plusの場合)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) awkの正規表現での最左最短マッチング 3 2022/07/01 00:10
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラム言語について。
-
VBAでパワーシェルを実行したい...
-
C#とC++について。
-
CLispのloop内の挙動について
-
interface 2021年5月号 P46
-
VBA 電話番号の正規表現について
-
Windowsのアプリ開発ってなんの...
-
プログラミングのPythonのnoteb...
-
vba クリップボードクリアにつ...
-
ImageMagickでgif画像の一部が...
-
ExcelVBAでFormulaR1C1を列範囲...
-
pythonにてseleniumを使うも、...
-
ホワイトハッカー
-
小学1年生の子です。塾に行かせ...
-
pythonで複数画像からgifを作る...
-
ハッシュテーブル(連想配列)が...
-
httpリクエストの送り元の特定
-
楽しくて最高のプログラミング...
-
プログラミング
-
家庭のパソコンで Python の 環...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング
-
小学1年生の子です。塾に行かせ...
-
vba クリップボードクリアにつ...
-
プログラマーと学歴の関係性に...
-
Webサイト内に埋め込んだmp4動...
-
正規表現で複数マッチ条件で悩...
-
windowsでテキストファイルの各...
-
楽しくて最高のプログラミング...
-
プログラミング ソースコード
-
Pythonって何を意識した言語な...
-
プログラミングを教えたいです...
-
pythonで複数画像からgifを作る...
-
pythonにてseleniumを使うも、...
-
Pythonでgif画像が上手く作れない
-
Google ColaboでGUI作成
-
テキストファイルのファイル名...
-
プログラミング、アーキテクチ...
-
そのまま使っただけなのに・・...
-
このURLで広告を出しているのは...
-
chatGPTで次々と質問をしていく...
おすすめ情報