gawkの使い方

このQ&Aのポイント
  • Windows7 32bitパソコンのCADで使っているマクロプログラムが64bitでは動作しない問題について
  • jgawkは16bitのため64bitでは使えないので、gawkに書き換える必要があります
  • 具体的な修正方法が分からず困っているので、教えていただけると助かります
回答を見る
  • ベストアンサー

gawkの使い方

windows7 32bitパソコンのCADで使っているマクロプログラムが64bitでは動きません。 ネットなどで調べてみると【jgawk】は16bitのため64bitでは使えないことが分かりましたが、マクロプログラム修正の仕方が分かりません。 (下記プログラム内容の抜粋) 64bitでは『gawk』が使えることが分かりましたが、単純にjgawk→gawkに書き換えて、“gawk.exe”を指定フォルダに置きましたが動きませんでした。 他にどの部分をどのように書き換えればいいか分からず困っております。 このようなことについては素人ですのでどなたか教えていただけないでしょうか。 ------------------------------------------ let count 0 let X_AXIS 0 let Y_AXIS -12.5 let N_BAN 0 let O_BAN 0 let page 0 DRAWING_SCALE 1 first_page read 'ファイル名を入力してください' d_file copy_file d_file del_old "C:/Temp/data2" load subpart (c_dir+'macro/buhin-a') 0,0 let page 1 run (c_dir+'bin/jgawk ''{ printf "%9s%2s%32s%15s%5s%45s%2s\n",$1,$2,$3,$4,$5,$6,$7}'' C:/Temp/data2> C:/Temp/data') ------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> jgwakをgawkに変更しましたが、動きませんでした。 gawk.exeを置いたディレクトリは正しいですか? 上記のスクリプトだと 実行ディレクトリ(macroとかある階層) のbinの下を指定しているようですが C:\Program Files (x86)\GnuWin32\binに置いだけとか? とりあえず、問題を絞り込むために、コマンドプロンプトを使って 実行ディレクトリで bin\gawk ''{ printf "%9s%2s%32s%15s%5s%45s%2s\n",$1,$2,$3,$4,$5,$6,$7}'' C:/Temp/data2>C:/Temp/data が動くか確認してみてはどうでしょう。

moldengi
質問者

お礼

説明不足ですみませんでした。 実行ディレクトリ(macroとかある階層) のbinの下にgawk.exeをおいております。 また本日やり直したところプログラムは動いていました。(エラーで止まりません。)しかしC:/Temp内に作られるdataファイルには何も書き出せてはいないようです。 質問で記載したプログラムの抜粋では分かりづらいので、一旦この質問を締切として再度質問投稿させていただきます。

その他の回答 (3)

回答No.3

> “gawk.exe”を指定フォルダに置きましたが動きませんでした。 jgawk.exeのかわりにgawk.exeを使うのなら > run (c_dir+'bin/jgawk ''{ printf "%9s%2s%32s%15s%5s%45s%2s\n",$1,$2,$3,$4,$5,$6,$7}'' C:/Temp/data2> C:/Temp/data') のjgwakも gawkに変更しないと、コールできないと思いますが、そこは 修正済ですか?

moldengi
質問者

補足

jgwakをgawkに変更しましたが、動きませんでした。

回答No.2

gawkは、所謂Unix系OSで使われているawkというスクリプト言語のGNU版です。 質問に書かれているスクリプト(?)ですが、どう見てもawkの文法に合わず、全くの別物と思います。 名前が似ているからと勘違いされる事も有るようですが、 http://okwave.jp/qa/q9001988.html jgawkのスクリプトを修正すればgawkで動くという話は間違いと思います。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

''{ printf "%9s%2s%32s%15s%5s%45s%2s\n",$1,$2,$3,$4,$5,$6,$7}'' この程度の処理であれば、awkの違いによる差は無いので、原因はそれ以外の部分にあります。 ほとんど情報が無いので、これ以上は何とも言えません。

関連するQ&A

  • gawkの使い方-2

    windows7 32bitパソコンのCADで使っているマクロプログラムが64bitでは正常にアウトプットが出てきません。 指定したテキストファイルを、CAD上の雛形に記載して表を作成するマクロプログラムです。 (プログラム概略添付します。) ==試したこと== 単純にjgawk→gawkに書き換えて、実行ディレクトリ(macroとかある階層)のbinの下にgawk.exeをおきましたが改善されませんでした。

  • gawkの記述

    あるフォルダ内にあるtext01****.cvsというtextという文字で始まる ファイルが幾つかあって、最新のファイルのみを指定のフォルダの aaa.csvにコピーするバッチを作っています。 gawkを使ってバッチファイルを作っています。 dir /b /o-d text* | gawk '{system("copy " $1 " c:\\ikou\\aaa.csv"); exit}' という具合。 windowsNT4.0 wsやwindows2000 pro では有効に使えますが windowsNT serverでは動作しないようです。 NT4.0serverのOSに原因があるように思います。 どなたか、お分かりになりましたら教えてください。

  • gawkについて

    gzファイルを解凍しつつ、不必要なデータを取り除いて 別ファイルを作成したいと考えています。 gzファイルの内容はログなどが複数行です。 gzファイル:test.gz 新規ファイル:kekka.txt 不必要なデータは.html, .htmを含むレコードを取り除きたいと 思います。 gunzip -c test.gz | gawk '/.html/.htm/' > kekka.txt でいいのでしょうか?

  • UNIXの"find"コマンド同等のプログラム作成について

    お世話になっております。 現在UNIXの"-type f"オプションのついた"find"コマンドと同等のプログラムをC言語で作ろうとしています。 つまりディレクトリ内のファイル(サブディレクトリ内のファイル含む、ディレクトリは除外)を全てフルパスで表示するプログラムです。 現在下記の関数を作成したのですがうまく動いてくれません。 どなたかご教授いただけないでしょうか。 【問題】 プログラム内の(**)前後で"dir1"が変更される。 (**)前:"/ディレクトリA/" (**)後:"/ディレクトリA/ディレクトリA内のファイル1" 本当は"dir1"には:"/ディレクトリA/"のままであってほしいです。 "strcat"コマンドの仕様が影響しているのでしょうか。 int _find(char dir1[] , int k ,int l , int m ) { DIR *dir ; struct dirent *dp ; struct stat statbuf ; char txt[1000] ; if ( m == 0 ) l++ ; if ( (dir = opendir(dir1)) == NULL ){ printf("%s",dir1) ; perror("opendir") ; exit(1) ; } for( dp=readdir(dir) ; dp != NULL ; dp=readdir(dir) ){ if ( strcmp(dp->d_name,".") != 0 && strcmp(dp->d_name,"..") != 0 ){ /* ROOT_DIR名-にファイル名を付け加えて、フルパスにする */ strcpy( temp[k][l] , dir1) ; strcat( temp[k][l] , "/" ) ; strcat( temp[k][l] , dp->d_name ) ;  (**) stat( temp[k][l] , &statbuf ) ; if(S_ISDIR(statbuf.st_mode)){ l=_find(temp[k][l],k,l,1) ; }else{ sort[k][l]=temp[k][l] ; printf("temp[%d][%d]=%s\n",k,l,sort[k][l]); printf( "dir5=%s\n",dir1) ; l++ ; } } } closedir(dir) ; return l ; }

  • ディレクトリの削除

    winxp he sp2 Q: \temp以下のdirectoryとfileを削除する方法ありませんか  RD /s \temp では \tempも削除されます。 \tempは残して、それ以下のdirとfileを削除する方法です。 \tempの下の\aa \bb はテンポラリdirで、名前がころころ変わります。 \temp -\aa 名前がころころ変わる -\bb 名前がころころ変わる RD /s \temp /S 指定されたディレクトリに加えて、そのディレクトリ内のすべての ディレクトリとファイルを削除 よろしくお願いします。

  • C++での24bit符号付き整数値の処理

    現在wavファイルからデータを読み出し、少数倍して再び格納するプログラムを作成しています。 量子化ビット数が16,32bitの場合は読み出したデータをshort型,int型の変数に入れて、そのまま計算が出来るのですが、C++には24bitの変数型がないため、24bitデータの処理に苦戦しています。 1サンプルあたり24bitで格納されているデータを読み出し、(double)倍したのち再び24bitずつ(3byte間隔で)書き込むにはどのようにすれば良いでしょうか? 一度int型に格納し、計算してから上位3byteを書き込む方法が簡単だとは思うのですが、負の値の扱いに困っています。 どなたかサンプルプログラムをお教えいただけると幸いです。

  • IE11 64bitを表示するには

    ネットトラブルというほどでもないですが教えて下さい。 現在IE11を使用したいます。 バージョンを見ますとbit数は何も書いてありません。という事は32bitという事で認識しています。 このファイルの保存場所はC:\Program Files\Internet Explorerになっています。 64bitも使ってみようと思い探すのですがどこにも見当たりません。 そこで調べたところデフォルトでは下記に格納されているようです 32bitは、"C:\Program Files (x86)\Internet Explorer\iexplore.exe" 64bitは、"C:\Program Files\Internet Explorer\iexplore.exe" ということは私の場合は64bitが格納されている場所ということになりますがなぜか32bitのようです。 しかし"C:\Program Files (x86)\Internet Explorer\iexplore.exe"にはiexplore.exeの実行アイコンはありません。 又調べた結果、 インターネットオプションの詳細タブ→セキュリティ項目にある「拡張保護モードを有効にする」をONにしないとダメなようでチェックをONしました。 すると両方のパスに実行ファイルは存在するようになりました。 ただどちらもバージョンのbitの表示はありません。32bitのようです。 IE11にも32bit,64bit,がありますよね。プログラムが違うのですね。スタートメニューにも64bitの項目はありません。「新しいバージョンを自動的にインストールする」にチェックをいれていますので、その時64bitの方は削除されたのでしょうか、私のインストしているプログラムには1つしかないですが。 WINDOWS7 Pro IE11

  • 不可解なプロセスがありますが

    ウイルスバスター導入後発生しているんですが Windows\temp配下に不特定の名前のファイルが常に出てきます 消しても次に起動すると別の名前で同容量と日付のファイルが 発生し、タスクマネージャにもファイル名と同じプロセスが起 動されているのですがこれってそのままでいいのでしょうか? 他のパソコンも同じです。アイコンは、犬のアイコンを示して います。 ---------------- C:\WINDOWS\Temp>dir ドライブ C のボリューム ラベルは ローカル ディスク です ボリューム シリアル番号は 6C10-2C9A です C:\WINDOWS\Temp のディレクトリ 2008/05/11 20:12 <DIR> . 2008/05/11 20:12 <DIR> .. ~~~~~~~~~~~~~~~~~~ 2005/04/12 02:46 172,099 SQ164.EXE ←これです ~~~~~~~~~~~~~~~~~~ C:\WINDOWS\Temp>

  • VBS(WSH)でディレクトリの場所を取得する方法

    DOSコマンドで下記のようにすると、"temp"というフォルダがCドライブ内のどこに存在するか確認できますが、VBSで同様の結果を取得する方法がわかりません。 C:\> dir temp /s 申し訳ありませんが、分かるかたがいましたらお願いします。

  • ビットデータの取得方法について

    32    24 23  16 15    87    0 +--------+--------+--------+--------+ |11000111 |11000111 |11000000 |00000000 | +--------+--------+--------+--------+ ↑のようなビット情報から 24-34bitの1byteにデータa 22-23bitの2bitにデータb 16-21bitの6bitにデータc 14-15bitの2bitにデータd がつめられている場合 データa,b,c,dを参照するためにCで (1)シフト演算で参照する方法 (2)構造体のビットフィールドで参照する方法 をご教授いただけないでしょうか?

専門家に質問してみよう