• ベストアンサー
※ 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

  • 3行ずつ足す

    AWK を使っていあのですが、perl への移行を目指して勉強しています。 (1) 行数が3の倍数 (2) 列数は分からない(スペース区切り。固定列数) (3) # はコメント行 というデータがあります。 このデータを perl に読み込ませて、  三行ずつ足して出力する ようなプログラムをつくっています。 例えば、6行4列のデータ test.dat # comment 1 2 3 5 3 2 1 6 2 2 2 7 4 5 6 7 6 5 4 6 5 5 5 5 を cat test.dat | sum3row.pl のように perl のプログラム sum3row.pl に読みこませて、三行ずつ足して # comment 6 6 6 18 18 18 18 18 という出力を得たいのです。 次の点で困ってます。 ●AWK の場合、今読み込んでいる行の列数は NF という変数で分かるのですが、perl ではよく分かりません。データへのアクセス自体は $data[2] のようにすれば良いことは分かっているのですが・・。 ●AWK の場合、今読み込んでいる行の番号は NR という変数で分かるのですが、perl ではよく分かりません。 すみませんが、よろしくお願いします。。 サンプルプログラムでも助かります(読んで自分で勉強しますので)。

    • ベストアンサー
    • Perl
  • エクセルの並び替えで、タイトル行があるときとセル結合があるときにうまくいかない。

    エクセルのデータ並び替えで2点質問がありますので、よろしくお願いいたします。 エクセル2007とエクセル2003で実行してみましたが、結果は同じでした。 1.並び替えをする際に、先頭行をタイトルとして認識させると思うのですが、タイトル行が2行とか3行ある場合にはどうすればいいでしょうか? 先頭行以外がデータとして認識されてしまい、一緒に並び替えされてしまいます。 2.並び替えをしたくてもデータ中にセルの結合をしていると並び替えしてくれないようです。実際の現場ではセルの結合をしている表は結構あると思うのですが、セルの結合があるとやはり並び替えはできないのでしょうか?

  • perlで先頭の数値をみて昇順にならびかえたい。

    perlで先頭の数値をみて昇順にならびかえたい。 以下のようなデータの先頭の二桁の数値をみて、昇順に行ごと並び替えをしたいです。 sort を使えば簡単にできるのでしょうか? perlをはじめたばかりでよくわかりません。 ぜひ詳しく教えてください。お願いします

  • 行の途中から読み込む方法

    こんにちは。 Javaでテキストファイルを読み込みたいのですが、以下のことができますか? ・行の途中から行の途中まで読み込む処理をファイルの終わりまで行う。 例えば、先頭から5文字目~先頭から20文字を1行分のデータとして取り込む方法を教えてください。

    • ベストアンサー
    • Java
  • エクセルで列と行の並び替えは出来るのでしょうか?

    エクセルで 例えば、1行10列のデータを10行1列に 並び替えが出来ないものでしょうか? 宜しく御願い致します.

  • 合致する番号のデータを抽出する方法を教えてください

    合致する番号のデータを抽出する方法をおしえてください perlの勉強を始めたばかりの初心者です。 下の画像のようにタブで区切られたデータです。一行で一人分のデータです。 先頭の4桁の数値がユニークで、この数値をつかって抜き出します。 0125 0251 2650 : : : 上記のように与えられた別ファイルの数値と合致する行だけを抜き出し別ファイルにはきだす方法を教えていただきたいです。 シンプルでわかりやすいもの、メモリに負担のすくないものなど複数の方法を教えていただきたいです。 説明もいただけるとありがたいです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • numbersで特定行の抽出するには

    アップルのnumbers 09の操作について質問です。 下記のようなデータがあります(実際は★マークはありません)。 左の列の数字は1から、同じ数字を複数個連続しながら順番に並んでいます。 右の列の数字はランダムです。 1 25 ★ 1 88  1 55  2 95 ★ 2 52  2 10  3 99 ★ 3 57  3 41  4 50 ★ 4 46  4 06  ★マークのところだけ、つまり左列の数字の先頭行だけを抜き出して 下記のように並び変えたいのですが、自動で抽出できますでしょうか? (繰り返しますが、実際のデータには★マークはありません) 1 25  2 95  3 99  4 50  よろしくお願いします。

  • エクセル:文字列間の行を抽出

    エクセルファイルで1つのシートに複数の表がひたすら縦に並んでいます。それぞれの表が別々のシートに記載されるようにしたいと思っています。 どの表も基本的な書式は同じなので列数は同じなのですが、行数は表ごとに異なります。 また各表の右下(C列)にTotalという文字列が必ずあります。 文字列Totalがある行の直下の行から次のTotalのある行まで抽出して、シートを作成できれば良いのだと思うのですが、どうすれば可能になるのか分かりません。 どなたか教えていただけ無いでしょうか。

  • Excel 2007で6万5536行以上のデータ

    Excel 2007では、最大列数が従来の256列から1万6384列に,最大行数が従来の6万5536行から104万8576行に増えたと聞きました。私のExcelは、2007ですが、最大行数は6万5536行のままです。 どうしたら、6万5536行以上のデータを扱えるようになるのでしょうか? 何らかの設定変更で可能になるのでしょうか?

  • 文字列の数抽出、行挿入マクロ

    急きょ下記処理を実施することになったのですが、本やネットで下記処理ができるような マクロを色々探していもなかなか見つからず…。(T_T) どなたか詳しい方がいらっしゃいましたら教えていただけませんでしょうか? ・A列に特定の文字列(;)があった場合、その列をコピー。 ・その列の下に文字列(;)の数と同数の行を挿入。 ・挿入した行のAセルに、文字列(;)のすぐ後ろの1ケタを貼り付け。 ・(挿入行が2行の場合) さらに下に挿入した行のAセルに、左から2つ目の文字列(;)の  すぐ後ろの1ケタを貼り付け。 なお、A列の行数は、現時点で500行ほどあり、今後増える可能性もあります。 【処理する前】       A列      B列    C列 1行目  1;32     555   AAA 2行目  29;1;4   222   GGG 3行目  600      111   FFF 【マクロ実行後】       A列    B列   C列 1行目  1     555   AAA 2行目  32    555   AAA 3行目  29    222   GGG 4行目  1     222   GGG 5行目  4     222   GGG  6行目  600   111   FFF どうぞよろしくお願いいたします。