ファイル内のデータの並び替え処理したく、質問します。
データは、1列目に通し番号、2、3、4列目にデータが入っています(下に例を書きます)。
5行ごとに5つの行のデータをまとめたいのです。
具体的に言うと、「1、6、11、16、21行目」のデータをまとめて1行(タブ切り)に。新しい行には、真ん中の数字「11」を先頭列に入れたいです。
それをずらしてゆき、「2、7、12、17、21行目」のデータを1行に、、というようにしたいのです。
扱うファイルの行数は、様々です。
これを統計処理を行う予定です。perl初心者ですので、トライした思案策を載せても参考にならないかと思い、0から教えて頂く形になりますが、よろしくお願いします。
1101010
2202020
3303030
4404040
5505050
6101010
7202020
8303030
9404040
10505050
11101010
12202020
13303030
14404040
15505050
16101010
17202020
18303030
19404040
20505050
21101010
22202020
23303030
24404040
25505050
出来上がりは、
11 10 10 10 10 10 10 10 10 10
12 20 20 20 20 20 20 20 20 20
というようになります。
No.2ベストアンサー
- 回答日時:
以下効率や「分かりやすさ」は完全に無視.
とりあえず「5行おき」を無視して「5行ずつ」でその処理をすることはできますよね? 例えば
sub collect {
my @lines = @_;
my @data = (split ' ', $lines[2])[0];
for my $l (@lines) {
push @data, (split ' ', $l)[1..3];
}
print join("\t", @data), "\n";
}
で表示できます. あとは, 読み込んだ全データに対してこれを回せばいいので
@lines = <>;
for my $i (20..$#lines) {
collect(@lines[$i-20, $i-15, $i-10, $i-5, $i]);
}
でいけそう.
ありがとうございます。下手な質問に付き合って頂きありがとうございました。
行をarrayにして、、という処理でしょうか。勉強になります。
まだ解読出来ていませんが、スキルアップのため、理解しながら使用したいと思いますので、お礼を先に申し上げます。
No.1
- 回答日時:
これは正直何をしたいのかがさっぱりわからないな~.
まず, 「1列目」とか「2、3、4列目」とかがどこなのか分からん. そして, 「扱うファイルの行数は、様々です」という前提で「5行ごとに5つの行のデータをまとめたい」というのがどのような形を期待しているのか不明. 例えば, 元のデータが 68行あるとしたら,結果はどうしたいの?
さらに「新しい行には、真ん中の数字「11」を先頭列に入れたいです」とあるのですが, この「11」がどこから出てきたのかが分かりませんし, ここに与えられたデータからなぜこの「出来上がり」になるのかも全く理解できない.
この回答への補足
確認画面と表テーブルの表示が随分異なり、tab切りが不明瞭でした。それに加え、説明が不十分でした。
表にtab切り(¥t)を入れました。
1列目 ¥t 2列目 ¥t 3列目 ¥t 4列目
1\t 10\t 10\t 10
2\t 20\t 20\t 20
3\t 30\t 30\t 30
4\t 40\t 40\t 40
5\t 50\t 50\t 50
6\t 10\t 10\t 10
7\t 20\t 20\t 20
8\t 30\t 30\t 30
9\t 40\t 40\t 40
10\t 50\t 50\t 50
11\t 10\t 10\t 10
12\t 20\t 20\t 20
13\t 30\t 30\t 30
14\t 40\t 40\t 40
15\t 50\t 50\t 50
16\t 10\t 10\t 10
17\t 20\t 20\t 20
18\t 30\t 30\t 30
19\t 40\t 40\t 40
20\t 50\t 50\t 50
21\t 10\t 10\t 10
22\t 20\t 20\t 20
23\t 30\t 30\t 30
24\t 40\t 40\t 40
25\t 50\t 50\t 50
1行3個のデータが入っており、5行おきに5行分のデータを集めるので、5x3=15個のデータが新しい1行に集められます。
1、6(1+5)、11(6+5)、16(11+5)、21(16+5)行にあるデータを集めた場合、新しい行の先頭列には、集めた行の3番目の数字11を入れておきたいのです。
68行までしかない場合は、64、65、66、67、68行について処理したら終了したいと思います。
統計のT検定をおこなうための標本を作っています。
結果は、
11 \t 10 \t 10\t 10 \t 10 \t 10 \t 10 \t 10 \t 10 \t 10 \t 10 \t 10 \t 10\t 10 \t 10 \t 10¥n
12 \t 20 \t 20\t 20 \t 20 \t 20 \t 20 \t 20 \t 20 \t 20 \t 20 \t 20 \t 20\t 20 \t 20 \t 20¥n
としたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
CSVファイルの内容を編集する方...
-
データが消えてしまう
-
2つのCSVファイルをマッチング
-
ReadLineでの読み出し行を指定する
-
拡張子 ”log” と ” dat” の違い
-
perlで、後ろの行を読んで、前...
-
バッチファイルの作り方(CSV→...
-
python renameについて
-
1行がやたら長いテキストをバッ...
-
コンソール出力をテキストに出...
-
batファイルでrenameができませ...
-
FindFirstFileとFindNextFileで...
-
close()で例外が投げられる理由
-
Edge スクレイピング
-
system関数と引数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
VBAで巨大なファイルの途中から...
-
JavaでCSVファイルを高速に読む...
-
Perlの変数に文字数制限(容量...
-
ReadLineでの読み出し行を指定する
-
MATLAB グローバル変数の宣言
-
perlで、後ろの行を読んで、前...
-
2つのCSVファイルをマッチング
-
拡張子 ”log” と ” dat” の違い
-
CSVが可変長の場合の検索方法
-
csvファイル改行コードの置換に...
-
C言語でのファイルのデータ更...
-
5万件対5万件のデータを高速...
-
VBScriptでファイル保存先のデ...
-
エクセルマクロについて CSVフ...
-
__DATA__の意味
おすすめ情報