perlで該当する行のみ別ファイル出力

このQ&Aのポイント
  • timelog.txtの23時台で始まる行をtimelog_yesterday.txtへ出力する方法
  • timelog.txt中の[00:]で始まる行をそのままにする方法
  • perlを使用して、特定の条件を満たす行のみを別のファイルに出力する方法
回答を見る
  • ベストアンサー

perlで該当する行のみ別ファイル出力

timelog.txtのファイルの中に、[時:分:秒,不特定数値]が入っている状態で、 [00時]台が検出された場合にその前にある23時台で始まる行だけをtimelog_yesterday.txtで出力したいのですが どのようにしたらいいでしょうか? 例) timelog.txt ------------------------------ 23:58:00,-2 23:59:00,-1 00:00:00,0 00:01:00,1 00:02:00,2 00:03:00,3 00:04:00,4 ------------------------------ ↓ timelog_yesterday.txt ------------------------------ 23:58:00,-2 23:59:00,-1 ------------------------------ timelog.txt ------------------------------ 00:00:00,0 00:01:00,1 00:02:00,2 00:03:00,3 00:04:00,4 ------------------------------ また、この時[00:]で始まるものがない場合はそのままにしたいです。 例) timelog.txt ------------------------------ 00:00:00,0 00:01:00,1 00:02:00,2 00:03:00,3 00:04:00,4 ------------------------------ ↓ timelog.txt ------------------------------ 00:00:00,0 00:01:00,1 00:02:00,2 00:03:00,3 00:04:00,4 ------------------------------ お手数をお掛けしますが、ご教授いただけると幸いです。 よろしくお願い致します。

  • pming
  • お礼率40% (4/10)
  • Perl
  • 回答数1
  • ありがとう数0

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

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

下の例は意味不明ですが (「[00:]で始まるものがない場合は」と書いているがすべてのデータが「00:」で始まっている), 本質的には何も考えず 「00:」で始まる行を見つける →その前にある「23時台で始まる行」だけを別の配列に切り出す (元の配列からは取り除く) →それぞれの配列を個別のファイルに出力する でいいのでは?

関連するQ&A

  • ファイルの3行目までを出力したい

    Perl初心者です。 test.txtというファイルがあって、その中の1行目から3行目までを 出力したい場合はどうしたらいいでしょうか? open(FILE,"test.txt") || die "Open Error.\n"; @data = <FILE>; close(FILE); foreach (@data) { print $_; } これだと、ファイルの中身が全て出力されてしまいます。

    • ベストアンサー
    • Perl
  • 多数あるファイル(text base)の*行目だけを引っ張ってきて標準出力させたい。

    Unix初心者です。 SunOS > head -1 ./*.txt とすれば、以下のように1行目だけを引っ張ってきて標準出力させる事も可能ですが。 ==> 1234.txt <== hello ==> 1235.txt <== hello SunOS > head -2 ./*.txt とすると、1行目と2行目が標準出力されます。 ==> 1234.txt <== hello bye ==> 1235.txt <== hello bye ですが、以下に例をあげますが、このように " 2行目だけ " を標準出力させたいのです。 ==> 1234.txt <== bye ==> 1235.txt <== bye sed -n '2p' ./*.txt だと、理由は不明ですが一つのファイルしか標準出力されませんでした。 head 、sed でなくともawk grepでも構いません。 その他の自分の知らないコマンドで構いません。 文字検索ではなく、*行目と行数指定です。 できれば、ファイル名も同時に出力させたいのです。 欲を言えば、行数も出力させたいです。 更に、翌を言えば、指定行を増やせたら最高です。 例;)1行目と3行目を標準出力する。 scriptを作りこまずに、|(パイプ)でつなげれば一行のコマンドで処理可能なのでは ないかと想像してますが、いかがでしょうか。 宜しく頼みます。

  • ファイルから特定の行を出力したい

    あるファイルの特定の一行だけを取りだすunixの コマンドを教えて下さい。 具体的には cat a.txt 1gyoume 3gyoume 4gyoume 5gyoume 6gyoume 7gyoume 8gyoume といったファイルの末尾からX行目の内容を変数に入れたいのです。 a.txtが8行あると判断して8-X行目でファイルを分割、そのファイル をtailコマンドで末尾1行目だけ出力すると出来そうだと思ってい るのですがもっと簡単な方法はないでしょうか。

  • 複数ファイルで、それぞれの行数をカウントして出力する

    こんにちは。 お世話になります。 早速ですが、やりたい事は・・・ 複数のデータファイルを用意しています。 それぞれに異なるデータが入っています。 そして、そのファイル毎の行数を取得し、かつそれぞれにタイトルをつけたいのです。 例) 1.txtには10行分→出力する時には「帽子:10個」 data2.txt→8行→出力する時には「植木鉢:8個」 abc.txt→30行→→出力する時には「チョコレート:30個」 ・ ・ ・ そしてそれを改行しながら出力 例) 帽子:10個 植木鉢:8個 チョコレート:30個 ・ ・ ・ ひとつのファイルに対して行数を得るのは下記の通りできました。 $f_URL="1.txt";//ファイル指定 $line=file($f_URL);//配列に $gyosu=count($line);//要素数をカウント echo "帽子:$gyosu個";//出力 ひとつひとつやればできないこともないのですが、同じ処理をやるので何かまとめて処理できる方法があるんだろうなぁ・・・とは思ったのですが・・・行き詰まりました(汗) あとできればデータファイルの内容はいじらないように使いたいのです。(1.txtの1行目にタイトルをいれておく...などは避けたいのです) もし何かよい方法があればご教授&アドバイスよろしくお願い致します。

    • ベストアンサー
    • PHP
  • perlにて不足行の補完プログラム

    毎分、特定の数値を取得し、外部のファイルに保存しているのですが、 前の時間と比較してデータの抜けがあった場合、 "データが抜けている時間"+"前回の数値"を追加して上書きをしたいのですが、どのようにしたらいいのでしょうか。 ご教授いただけると幸いです。 例) 補完前(読み込むファイル ・・・ acf.csv) ----- 00:01:00,227 00:02:00,234 00:04:00,254 ---- 補完後(書き込むファイル ・・・ acf.csv) ----- 00:01:00,227 00:02:00,234 00:03:00,234 00:04:00,254 ---- また、できればソースも書いていただけるとありがたいのですが。。。 よろしくお願いいたします。

  • C言語のファイル出力について

    C言語のfprintfによるファイル出力について教えてください。 fprintfで、下記の例のように、上書きする行を指定することはできますでしょうか? 出力ファイルは.csv形式で、モードは問いません。 例:既に、sample.csvというファイルがあり、中身が、 0 0 0 1 1 1 2 2 2 とします。プログラムのfprintfで、3 3 3という出力を2行目に上書きし、 0 0 0 3 3 3 2 2 2 と変更する。 もし上記の方法をご存知でしたら、ご教授いただけましたら幸いです。 よろしくお願いいたします。

  • UNIX C ファイル出力

    UNIX Cにてあるテキストファイルの中身(1行分)を、別のテキストファイルに出力したいのですが、どうすれば、いいでしょうか。 例。A.txt 123 yano 200612   ↓ B.txt 123 yano 200612

  • 複数のファイルを読み込み、1つのファイルとして出力する方法。

    Nakanoです。いつもお世話になっております。 例えばテキストファイルを2つ用意し、1つのテキストファイルとして 出力したいのですが、いまいちやり方が分かりません。出来るのかどうかも 分からないです。(汗) 下にサンプルデータがあります。取り合えず「in1.txt」「in2.txt」 を最終的に『out.txt』の様に仕上げたいのですが… # =in1.txt AAAAA BBBBB CCCCC DDDDD 1,000 2,000 3,000 4,000 1,001 2,002 3,003 4,004 1,010 2,020 3,030 4,040 1,100 2,200 3,300 4,400 =in2.txt EEEEE FFFFF GGGGG HHHHH 5,000 6,000 7,000 8,000 5,005 6,006 7,007 8,008 5,050 6,060 7,070 8,080 5,500 6,600 7,700 8,800 # =out.txt AAAAA BBBBB CCCCC DDDDD EEEEE FFFFF GGGGG HHHHH 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 1,001 2,002 3,003 4,004 5,005 6,006 7,007 8,008 1,010 2,020 3,030 4,040 5,050 6,060 7,070 8,080 1,100 2,200 3,300 4,400 5,500 6,600 7,700 8,800 # ・このデータはタブで区切っています。カンマはない場合もあります。 ・ファイルの中のそれぞれの文字列の数は固定です。行数も固定です。  各文字列の中の文字数はランダムです。  COPYコマンドを利用しても考えてみたのですが、後ろに続いちゃって  上手くいかなかったです。(笑)  Perlだと1つ目のファイルの1行目を配列に入れて、次に2つ目の  ファイルの1行目を配列に入れて、これを一旦出力して、同じ手順の  様な事を行を2行目、3行目、4行目、、とずらして繰り返す。って  感じでイメージしているのですが、どの様にソースを組めばいいのか  分かりませんでした。  どなたかご教授いただけないでしょうか? 宜しくお願い致します。

  • 指定の行をループさせてファイルに出力

    C言語で"input.txt"内の文の行範囲と 繰り返す回数をキーボードから入力することにより 結果を"output.txt"に出力するプログラムを考えているのですが、うまくできません。 具体例を以下に示しておきます。 ----input.txt---- aaaa bbbb cccc dddd eeee ------------------ キーボードから繰り返す範囲、2行目と4行目を指定。 繰り返す回数を2回に指定。 ----output.txt---- aaaa bbbb cccc dddd bbbb cccc dddd eeee ------------------- と、こんな感じにしたいです。 指定した行範囲を"output.txt"に出力することはできたのですが 繰り返しの部分がうまくできません。 どなたかご教授お願いします。 自分が作ったプログラムを下に載せておきます。 これをベースに作れたらいいのですが・・・ #include<stdio.h> #include<stdlib.h> #define STR_MAX 256 int main (void) { FILE *fpin, *fpout; char buff[STR_MAX]; int line = 1; int start; int end; printf("start >>"); scanf("%d",&start); printf("end >>"); scanf("%d",&end); if((fpin = fopen("input.txt","r")) == NULL) { printf("infile can't open\n"); exit(EXIT_FAILURE); } if((fpout = fopen("output.txt","w")) == NULL) { printf("outfile can't open\n"); exit(EXIT_FAILURE); } while(fgets(buff,STR_MAX,fpin) != NULL) { if((line >= start)&&(line <= end)) { fputs(buff,fpout); } line = line + 1; } fclose(fpout); fclose(fpin); return EXIT_SUCCESS; }

  • 同じ番号のデータを別のファイルにはきだだすには?

    下の画像のようのデータを一行一行みていき、先頭二桁が上の行と同じ場合それを同じファイルに一行一行はきだしたいです。 例 3,4,5行目は3.txt ファイルにはきだす。6.7行目は2.txtファイルにはきだす。その他は1.txtファイルにはきだす。 シンプルでわかりやすい方法を教えていただきたいです。 よろしくお願いいたします。