複数のテキストをまとめるperl or ruby

このQ&Aのポイント
  • 複数のテキストファイルをまとめる作業を行うために、perlまたはrubyを使用したスクリプトを作成したいと考えています。
  • これは、テキストファイルの内容を取り込み、指定された形式でまとめる処理を行う作業です。
  • エクセルでは処理できないため、プログラミング言語を利用することで解決を図りたいと考えています。
回答を見る
  • ベストアンサー

複数のテキストをまとめるperl or ruby

以下のようなファイルが複数あります(textX.txt)。 最初の数字は桁数によってスペースの数が変わっています。 ファイルによって数字とそののちのTRXが変わってきます。 さらにTRXについてはあるファイルでは出てきたりでてこなかったりします。 このファイルをまとめたいと考えています。 その際にlist.txtを使ってoutput.txtのようにまとめていきたいです。 textX.txtででてこないものは0としたいです。 testX.txtは増減する可能性があるので、いくつでも対応できるものがありがたいです。 この作業をできるperlスクリプトを考えています。 rubyやpythonなどでも構いません。 複雑な作業ですが、これを解決するスクリプトをご教授いただけないでしょうか? エクセルでは処理できず困っています。 text1.txt 4 TR5|c0_g1_i1 1 TR6|c0_g1_i1 4 TR7|c0_g1_i1 14 TR7|c1_g1_i1 626 TR8|c0_g1_i1 517 TR8|c0_g2_i1 7 TR9|c0_g1_i1 2 TR9|c0_g2_i1 4 TR9|c1_g1_i1 list.txt TR5|c0_g1_i1 TR6|c0_g1_i1 TR7|c0_g1_i1 output.txt text1 text2 text3 TR5|c0_g1_i1 4 0 6 TR6|c0_g1_i1 1 5 1 TR7|c0_g1_i1 4 5 0

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

> TR5|c0_g1_i1406 > TR6|c0_g1_i1151 > TR7|c0_g1_i1450 どうしてこうなるのか、ぱっと見苦労しますが、ファイルが text2, 3 とあったとして、各第1フィールドがここに繋って出力されると理解すればいいのでしょうか? この程度なら内容を list.awk としておき ------------ FILENAME==ARGV[1]{r[++n]=$1;a[$1]=n;next} a[$2]>0{b[a[$2],FILENAME]=$1} END{ for (i=1;i<=n;i++) { printf "%s",r[i]; for (j=2;j<ARGC;j++) printf " %d",b[i,ARGV[j]]; print "" } } ------------ awk -f list.awk list.txt text* > output.txt cat output.txt TR5|c0_g1_i1 4 TR6|c0_g1_i1 1 TR7|c0_g1_i1 4 ということですか? 見にくいのでスペースあけてますが。最初のファイルには list.txt を指定します。

hiroponsettu
質問者

お礼

ありがとうございます。 入力ミスのところの意図を汲んで書いてくださり、申し訳ありません。 教えていただいたスクリプトででき、助かりました。

関連するQ&A

  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • Pythonでリストをテキストファイルへ

    こんにちは。 Pythonで、 ls=['ab\n','cde\n']  というリストをテキストファイルに書き出して、 ファイルの中身を ab(改行) cde(改行) とするには、どうやったらよいのでしょうか? 次のプログラムを動かすと、 #! /python30/python # coding:shift_jis import io s1=['ab','cde'] with open('foo1.txt',mode='wt',encoding='cp932') as f: print(s1,file=f) ファイルの中身は ['<script > 本日は\n', '</script><td></td>\n'] なってしまいます。

  • 3の倍数行まで1から数字を挿入し,カウントアップしていく方法

    よろしくお願いします.タイトル通り「3の倍数行まで1から数字を挿入し,カウントアップしていく方法」をテキストファイルで処理したいと思っています. 具体的にインプットとアウトプットは以下のようにしたいです. input.txt ----------------- a b c d e f g h i ・ ・ ・ ・ ・ output.txt ----------------- a,1 b,1 c,1 d,2 e,2 f,2 g,3 h,3 i,3 ・,4 ・,4 ・,4 ・,5 ・,5 perlでのファイルの読み込ませ方は理解していますので 読み込んで出力するまでの処理を教えていただけないでしょうか. よろしくお願いします.

    • ベストアンサー
    • Perl
  • 複数のテキストファイルを1つにまとめる

    同一フォルダ内にある複数のテキストファイルの内容を1つにまとめる方法を探しております。 例えば、 a.txt, b.txt, c.txt が同一フォルダにあり、 それぞれの内容が AAA BBB CCC である時に、これらをまとめて matome.txtとして、その内容が AAA BBB CCC となるようなプログラムを書きたいのですが、どの様な方法が考えられますでしょうか。 上の例では3つのテキストファイルですが、実際に処理したいファイルは数百個になる為、一つ一つファイル名を入力する作業が大変で困っております。 同一フォルダ内のファイルをファイル名順に一度に読み込み、まとめる方法がありましたらお教え下さい。

  • Rubyでテキスト内容を別のテキストに一度に出力したいのですが、どのよ

    Rubyでテキスト内容を別のテキストに一度に出力したいのですが、どのようにすればよいのでしょうか。 rubyはさっきはじめたところです。 一通り検索しましたが、やり方がヒットしませんでした。 a.txtの内容: aaaaa bbbbb ccccc ... を、ファイルコピーではなくoutput.txtに出力したいのですが、 a = open("a.txt") o = open("output.txt",w) ??? a.close o.close で、???の部分にどのような処理を書けばよいのでしょうか。 putsやwriteで書いてみたのですが、(o.write a) #<File:0x28a4450> と出力され、(ファイルオブジェクトのアドレス?)、a.txtの内容が出力出来ませんでした。 a.xxx のようにするのかな、と予想しますが、方法は問いませんので、ご教示いただけないでしょうか。

    • ベストアンサー
    • Ruby
  • Perl, Ruby, Pythonいずれかの習得

    私は普段、 C, C++, nasm を使ってプログラミングしています。 最近(主にテキスト等の処理のために)スクリプト言語を習得しようと思いたち(C++のboostでもいいんだけど)、どれがいいかと悩んだ結果、タイトル通り Perl, Ruby, Python のどれかがいいという考えに至りました。 一つ一つの言語としてのメリット、デメリットはあると思いますが、この3つに関しては至るところで議論されていますし、五十歩百歩というのが結論のようです。 そこでこれらの言語をお使いの方々から現在 CやC++ を主に使っている人間が最も習得しやすいとおもわれる言語はこの3つのうちどれかについてご意見賜りたくおもいます。 よろしくお願いします。

  • リストファイルに一致する個数のカウントについて

    以下にリストファイルと、インプットファイルがあります。 リストファイルのそれぞれにインプットファイルの中で何個一致するかを出力させたいです。 目的にかなうawkや perlなどのスクリプトを教えてほしいです。 list.txt a b c d ・・ input.txt 1 a b c 2 a d 3 4 b c ・・ output.txt a 2 b 2 c 2 d 1 ・・

  • バッチファイルで複数フォルダのファイルを結合したい

    バッチファイルで複数フォルダの中にあるlist.txtというテキストファイルを結合するにはどのように記述すればよいでしょうか。 具体的には、 複数のフォルダがあり、 C:\test\202104026\list.txt C:\test\202104025\list.txt      : C:\test\20000101\list.txt というような感じで、 各フォルダの中にlist.txtというファイルが入っています。 list.txt以外にもいろいろなファイルが入っています。 各フォルダの中のlist.txtファイルの内容を結合した1個のファイルを生成するバッチファイル(test.bat)を教えてください。 よろしくお願いします。(Windows10)

  • Rubyにおけるopenメソッド

    Rubyの勉強をはじめました。 簡単なことが、分かりません。 open メッソドにて、ディレクトリの指定の仕方が分かりません。 ------------------------------------------- open("mytest.txt", "w") do |output| output.print "aaaaaaaaaaaaaaaaaaaaaaaaaa" end ------------------------------------------- これは、current directoryにファイルmytest.txtを生成すると 在りますが、currentがわからず、ファイル検索で調べたら、 C:\Documents and Settings\Administrator\Local Settings\Temp に出来ていました。 Start/プログラムにある、RDEを立ち上げた直後のことです。 (1)書き出す、或いは、読み出すファイルのディレクトリの指定の仕方 (2)フルパスでファイルを指定する方法 open("c:\mytest2.txt", "w") do |output| output.print "aaaaaaaaaaaaaaaaaaaaaaaaaa" end これは、動きませんでした(ファイル生成されず) 宜しくお願いいたします。

  • PHPで複数のテキストファイルを読み込みたい

    PHPを勉強中です。 どうしても自力で解決できないので助けてください。 やりたい事は、 「複数ファイルの内容を読み込み、  それらのデータをcsvのセルに入れたい。」のです。 Aというフォルダに、複数のテキストファイルがあります。 これら各ファイルの内容をそれぞれ取得して 「○○.csv」のB列に上から順々に書き込んでいきたいのです。 Aフォルダに入っているテキストファイルは連番を想定しています。 A/ 0001.txt 0002.txt 0003.txt : フォルダに入っているテキストファイルの数はいろいろです。 3枚のフォルダもあれば100枚のフォルダもあります。 これらのファイルの内容を、それぞれ取得して 用意されているcsvファイルの特定のセルに テキストファイルの数だけ順番に入れていきたいのです。 ○○.csv A列  |  B列  |  C列  | △  |0001.txt内容|  △  | △  |0002.txt内容|  △  | △  |0003.txt内容|  △  | : : プログラムのヒントを教えていただければ嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう