• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:5行おきに5行ずつ抽出するには?~教えて下さい。)

連続した行のデータをまとめる方法

このQ&Aのポイント
  • ファイル内の連続した行のデータをまとめる方法について教えてください。
  • 行数が様々なファイルにおいて、5行ごとに5つの行のデータをまとめたいです。
  • また、まとめた行の先頭列には真ん中の数字を入れたいです。結果は統計処理に利用します。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答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]); } でいけそう.

kina808
質問者

お礼

ありがとうございます。下手な質問に付き合って頂きありがとうございました。 行をarrayにして、、という処理でしょうか。勉強になります。 まだ解読出来ていませんが、スキルアップのため、理解しながら使用したいと思いますので、お礼を先に申し上げます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

これは正直何をしたいのかがさっぱりわからないな~. まず, 「1列目」とか「2、3、4列目」とかがどこなのか分からん. そして, 「扱うファイルの行数は、様々です」という前提で「5行ごとに5つの行のデータをまとめたい」というのがどのような形を期待しているのか不明. 例えば, 元のデータが 68行あるとしたら,結果はどうしたいの? さらに「新しい行には、真ん中の数字「11」を先頭列に入れたいです」とあるのですが, この「11」がどこから出てきたのかが分かりませんし, ここに与えられたデータからなぜこの「出来上がり」になるのかも全く理解できない.

kina808
質問者

補足

確認画面と表テーブルの表示が随分異なり、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