プロが教える店舗&オフィスのセキュリティ対策術

テキストファイルを、指定した数値の倍数の行を、指定した個数に分割するバッチファイルを作成しようとしています。

例えば、以下の様な内容の「in.txt」というテキストファイルを3分割したい場合、

----- in.txtの内容 -----
1
2
3
4
5
6
7
8
9
10
------------------------

以下の様な内容で、
「out1.txt」「out2.txt」「out3.txt」として出力したいのです。

----- out1.txtの内容 -----
1
4
7
10
--------------------------

----- out2.txtの内容 -----
2
5
8
--------------------------

----- out3.txtの内容 -----
3
6
9
--------------------------

自分はプログラミングの知識がないので、WEBに書かれている構文を少し書き換えたりして試しているのですが、うまく行きません。

AWKを使い、以下のようなバッチファイルを作成して実行してみましたが、「out3.txt」だけがうまく行きませんでした。構文の意味も分からないので修正も出来ません。

awk "NR%%3==1" "in.txt" > "out1.txt"
awk "NR%%3==2" "in.txt" > "out2.txt"
awk "NR%%3==3" "in.txt" > "out3.txt"

AWKの解説ページを読み始めたのですが、時間的な猶予があまり無く、今回質問させて頂いた処理が出来るようになるまでまだ時間が掛かりそうなので、どなたかお分かりの方がおられましたお教え頂けないでしょうか。

AWKでなくとも、sedでもPerlでもその他のコマンドでも構いませんし、スクリプトファイルを読み込めるコマンドでしたらスクリプトでの書き方でも結構ですので、ご存知の方がおられましたらお教え頂けないでしょうか。

A 回答 (1件)

perlで行います。


以下のようなスクリプトを作成してください。
--------------------------------------
@data = <>;
open(F1,">out1.txt");
open(F2,">out2.txt");
open(F3,">out3.txt");
for($i=0;$i<scalar(@data);$i++){
if ($i%3 == 0){
print F1 $data[$i];
}
if ($i%3 == 1){
print F2 $data[$i];
}
if ($i%3 == 2){
print F3 $data[$i];
}
}
close(F1);
close(F2);
close(F3);
------------------------------
このスクリプトをsample.plと名前をつけて保存してください。
名前は任意です。(他の名前でもかまいません)
in.txtがあるディレクトリと同じディレクトリに保存してください。
そしてコマンドプロンプトで
perl sample.pl in.txt
と入力してください。
そのディテクトリ下に
out1.txt,ou2.txt,out3.txtが作成されます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ActivePerlをインストールしてやってみました。
結果は見事に出来ました。本当にありがとうございました。助かりました。

これからプログラミングも勉強して行きます。本当にありがとうございました。

お礼日時:2014/04/04 21:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!