DOSで複数のファイルを一気に処理したいけど

このQ&Aのポイント
  • DOSで複数のファイルを一気に処理する方法
  • DOSのコマンドプロンプトを使って複数のファイルを一括処理したい場合、gawkコマンドを使用します。
  • ファイル名にワイルドカードを使用することで、一括処理が可能ですが、注意が必要です。
回答を見る
  • ベストアンサー

DOSで複数のファイルを一気に処理したいけど

こんばんは。DOSというかコマンドプロンプトで複数のファイルを一気に処理したいんです。 コマンドはフリーで入れたもので gawk -F "$1==2" test001.csv > test001syorizumi.csv というものでtest1.csvファイルを読み込んで"$1==2"(一列目の数値が2だった場合)という条件に合った行を集めてtest1syorizumi.csvとして保存するというものです。 この場合にカレントディレクトリにtest001~test100まで100個くらいデータがあるので一つずつやるのが大変で困っています。出力ファイルは入力ファイルにsyorizumiという文字をつけたいのです。 全部だからといってワイルドカードの「*」をつけて test*.csv > test*syrizumi.csv とするとエラーがでます・・・。 なにか方法があるのでしょうか。教えていただけませんか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.3

>FOR %%B IN (*.csv) DO gawk -F "$1==2" %%B > %%Bsyorizumi.csv %%Bshorizumi.csv ではなく、%%~nBsyorizumi.csv です。 コマンドプロンプトから、直接入力するのなら、 FOR %B IN (*.csv) DO gawk -F, "$1==2" %B > %~nBsyorizumi.csv と、%を1つにしてください。バッチファイルの中に書くときには%%です。 あるいは、全部gawkでやる方法もありますね。 gawk -F, -v out=shorizumi.csv "$1==2{f=FILENAME;sub(/\.csv/,out,f);print >f}" test*.csv

rabitwo
質問者

お礼

ご回答ありがとうございます。 コマンドプロンプトはめんどくさいので、バッチファイルでやりました。 でも、gawkの方はエラーが出てしまいました。 syntax error 0はsubに使える引数の数としては不正です 何を言ってるのでしょう。自分が理解していないコマンドだときついですね(汗)

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.4

>0はsubに使える引数の数としては不正です 私の書いた通りに書かずに、何らかのタイプミスをしたんですね。 gawk "{print sub()}" とか書くと出るエラーです。

rabitwo
質問者

お礼

すみません、しばらくほったらかしにしてしまってm(_ _)m

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.2

こちらの例 を 参考にして下さい。  ※ 2.ファイル連結のサンプル(renketsu.bat) http://memorva.jp/memo/windows/dos_bat.php FOR文の  DO 以降に実際に処理する コマンド記述するので、  DO の後、 copy  の代わりに、     gawk -F "$1==2" %%B > %%Bsyorizumi.csv  としてみてください。

rabitwo
質問者

お礼

ご回答ありがとうございます。 とても難しいですね(汗) 私の場合はコマンドプロンプトで FOR %%B IN (*.csv) DO gawk -F "$1==2" %%B > %%Bsyorizumi.csv と入力すればいいということですか? 試してみます!!

  • osahune
  • ベストアンサー率47% (288/609)
回答No.1

うろ覚えなんですが・・・ ワイルドカードの「*」をつけて・・というところ・・。 「???」でいけそうな気がしますが・・間違っていましたらごめんなさい^^;

rabitwo
質問者

お礼

ありがとうございます。 「*」を「???」でいったりするのですかね。それは考えていませんでした。今、使える環境に無いので今度試してみます!!

rabitwo
質問者

補足

???ではダメでした(^_^;

関連するQ&A

  • gawk複数ファイルを同ファイル名でフォーマットする方法

    gawk複数ファイルを同ファイル名でフォーマットする方法 gawkを使いcsv形式のファイルをjson形式のファイルにフォーマットしようと考えています。 簡単に説明しますと、 ●csvファイル test1.csv test2.csv test3.csv ↓↓↓↓ ●jsonファイル xxx-test1.json xxx-test2.json xxx-test3.json という風にフォーマットさせたいのです。 現在、 jsonファイル出力後の記述を ●aaa.awk BEGIN { FS = ","; printf("{"); } { printf("%s,%s,%s,%s", $1,$3,$4,$5); printf("],"); } END { printf("}"); } このようにし ●コマンドライン gawk -f aaa.awk test1.csv > xxx-test1.json これで一ファイルずつのフォーマットはできたのですが、 ファイル数が複数あり面倒なため、一気にフォーマットしたいのです。 その方法をご教授お願い致します。

  • CSVファイルの処理方法

    PerlでCSVファイルの処理をしようとしています。 CSVファイル(ここではdata1.csvとします)の中身は、A列とB列に数値が1000行程表記されています。 -5,1 -4,2 -3,3  ・  ・  ・ 作成したPerlのファイル(ここではtest1.plとします)下のようにし、 while ($_=<stdin>){ print"$_\n"; } Cygwinコマンド上で、 $ perl test1.pl <data1.csv と入力すると、CSVファイル(data1.csv)の数値がCygwinコマンド上に全て表記されます。 前置きが長かったのですが、CSVファイル(data1.csv)の3行目までの数値だけをCygwinコマンド上に表記したい場合、どのようにプログラムすればよいのですか。 お願いします。

    • ベストアンサー
    • Perl
  • タブ区切りtxtファイルをCSVファイルにしたい

    数値データの入ったタブ区切りのテキストファイルが約80個あり、 それらを全てCSVファイルにしたいです。 テキストファイルのデータ形式は以下のようになっています。 339.54 1091.50 339.92 1091.50 340.30 1091.50 340.68 1057.60 341.06 1028.22 これがあと数百行あります。 コマンドプロンプトでCSVにリネームすると、数値が詰まってしまい、困っています。 例えば上のデータ例であれば、 339.541091.50 のように表示されたCSVファイルになってしまいます。 339.54, 1091.50 のようなカンマ区切りのCSVファイルとして出力する方法はないでしょうか? VBAの知識が少しだけあるので、それを使った方がいい場合は教えて頂けると幸いです。 よろしくお願い申し上げます。

  • ファイルを作成するDOSコマンドって?

    DOSでテキストファイルを作成するコマンドは存在するのでしょうか? (UNIX環境でいうと、touchみたいなものです) ディレクトリを作成するコマンドはmkdirなんですが、ファイルを作成する コマンドって載ってないんですよ。。 DOSプロンプトから、helpで確認したんですが載ってなかったです。 helpに載ってないということは使用できない(存在しない) ということなのでしょうか? ■環境 Windows2000 Professional 回答宜しくお願いします。

  • zipファイルを(DOSコマンドで)一気に解凍したい

    フォルダ内にたくさんの.ZIPファイルがあるのですが、一個ずつダブルクリックして解凍(Lhasa)するのは面倒なので、DOSコマンドより一気に解凍したいのですが、解凍するコマンドは標準では装備していないのでしょうか? DOSのLHAやUNZIPを入れないと駄目でしょうか?

  • DOSでの複数ファイル分割

    DOSコマンドで、1ファイルから複数ファイルに分割する方法 を教えてください。 【例】 入力ファイル(input.txt) --------------------- あああああ いいいいい E ううううう E えええええ おおおおお かかかかか E --------------------- を出力ファイル output1.txt---------- あああああ いいいいい E --------------------- output2.txt---------- ううううう E --------------------- output3.txt---------- えええええ おおおおお かかかかか E --------------------- に分割出力したいです。 ・終了判定は、1文字目が半角Eの場合です。 ・入力ファイルは毎回可変です。終了条件部分は必ずあります。 (行数が可変ですが、1行辺りのバイト数は固定です。(終了行除く)) ・出力ファイルは最大13個程度です。 Windows2008サーバで実現したいので、サンプルプログラムをご提供 頂けないでしょうか。よろしくお願いします。 フリーソフト等は使用不可です

  • DOSコマンドでカレントディレクトリのディレクトリ名を一括取得

    DOSコマンドでカレントディレクトリのディレクトリ名を一括取得 DOSコマンドにて、カレントディレクトリ名を取得するのは、 for %I in (.) do set DIRNAME1=%~nI%~xI このようなコマンドでできると思います。 しかし、DOSコマンドにて「カレントディレクトリの中のディレクトリ名」を 一括取得して、複数の変数に保存する方法がわかりません。 以上、よろしくお願いします。

  • DOSプロンプトのリダイレクトについて

    仕事柄、DOSプロンプトのDirコマンドのリダイレクトを使い、ディレクトリ情報(ファイルリスト)をテキスト化したりすることを頻繁にしております。 ところが最近、ウィンドウズをMeからXP(HomeEdition)にアップデートしたところ、今まで普通に出力されていたディレクトリ情報が、8文字ネームにコンバートされて出力されるようになってしまいました。 filenameAAA.txt がfilen~1.txt のように。 これでは困るので、通常のロングファイルに対応したDirコマンドのオプション等があったりしたら教えて欲しいのですが。 あるいは、他にディレクトリ情報を正確にテキストにする方法をご存じの方、よろしくご教授お願いいたします。

  • ディレクトリ削除 Dosコマンド

    DOS画面から、ディレクトリを消すとき、普通はRD コマンドとかを使うと思うんですが、それだと、サブディレクトリがあると消せませんよね? サブディレクトリがいくつもある場合、そのルートごと削除するDOSコマンドはないでしょうか。 また、ファイルがあっても大丈夫でしょうか。

  • DOS findコマンドのバッチでストールする

    DOSコマンドプロンプトで.batファイルを作成。 内容は find "2007:01" access_log_2007_04_11.txt >log2007041101.csv このバッチファイルを、検索するaccess_log_2007_04_11.txt と同じフォルダー上において、ダブルクリックで起動すると。 コマンドプロンプトが開くのだが、以前実行した、 find "2007:00" access_log_2007_04_05.txt >log2007040500.csv が、延々と実行され。 コマンドプロンプトを閉じても log2007040500.csv を、消しても消しても、作成される。 システムを落とすしかなくなる。のです。 4月の頭では正しく動作していたんですが???