perlでの別ファイルへの出力について

このQ&Aのポイント
  • perlでファイルAから読み出した値を別ファイルBに出力する方法を教えてください。
  • bashでは簡単にできるが、業務上perlを使用する必要があるため困っています。
  • 質問者はperlを使用して、ファイルAから読み出した値を1行ずつファイルBに出力したいとしています。方法を教えてください。
回答を見る
  • ベストアンサー

perlでの別ファイルへの出力について

perlでファイルAから読み出した値を別ファイルBに出力させたいです。 イメージとしては -------------------------------- open(FILE,ファイルA); while(<FILE>){ my $line = "$_"; system("ls -l $line"); #←ここの結果を1行ずつファイルBに出力したい } close(FILE) --------------------------------- 上記の場合どのように記述すれば良いのでしょうか? bashでは簡単にかけるのですが、 業務上perlを使用する必要がある為こまっております…。

  • Perl
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

system 関数では出力を受け取ることができないので、コマンドラインで書くときと同じようにするとファイルに保存できます。 open FILE, 'fileA' or die $!; while (<FILE>) { my $line = $_; chomp $line; system("ls -l $line >> fileB") == 0 or die "system failed:"; } close FILE;

cha_katekin
質問者

お礼

ありがとうございました( ´∀`)

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

・open関数のパイプを使って、そのlsの出力を変数に取りこむ。 ・バッククオートを使って、そのlsの出力を変数に取り込む のいずれかを使えば、あとは普通に「文字列をファイルに出力するプログラム」になります。

cha_katekin
質問者

お礼

ありがとうございます。

関連するQ&A

  • 二つのファイルを1行ずつ出力するperlプログラム

    perl初心者です。 二つのテキストファイルを1行ずつ交互に出力するプログラムを作成しています。 コマンドラインからファイル名を渡して、 (二つのファイル名がそれぞれファイルa、ファイルbとした時) 1:ファイルa 1行目 2:ファイルb 1行目 3:ファイルa 2行目 4:ファイルb 2行目 となるようにしたいです。 while <STDIN> などを使うのでしょうか? 自分の知識ではプログラミングしきれそうにないのでどのようにしたらいいのか回答お願い致します。

  • perlでファイルを分割してファイル名も出力したい

    >AA A AAA aaaaaaaaaaaaaaa aaaaaaaaaaaa >BBB BB B bbbbbbbbbbbbbbb bbbbbbbbbbbbbbb bbbbbbbbbbbbbb ・ ・ こういった形式でテキストが入った大きいサイズのひとつのファイルを ・ファイル名 AA A AAA ・テキスト内 >AA A AAA aaaaaaaaaaaaaaa aaaaaaaaaaaa ・ファイル名 BBB BB B ・テキスト内 >BBB BB B bbbbbbbbbbbbbbb bbbbbbbbbbbbbbb bbbbbbbbbbbbbb となるように個別に出力させたいのですがどのようにすればよいでしょうか? #!/usr/bin/perl -w use strict; my $first; my $file; $first = 1; open(IN,"分割前ファイル"); foreach(<IN>) { if ( /^>(.*)/ ) { if ($first == 0 ) { close(OUT); } else {$first = 0; } $file = $1; $file =~ s/[\r\n]//; open(OUT,">$file"); } else { print OUT $1; print OUT $_; } } close(IN); このようなプログラムを組んだのですが、出力結果はファイル名についてはいいのですが、テキスト内が思ったようにいきません。 ・ファイル名 AA A AAA ・テキスト内 AA A AAAaaaaaaaaaaaaaaa AA A AAAaaaaaaaaaaaa このような結果になってしまいます。 どなたか対処方をわかるかたがいましたらお願いします。

    • ベストアンサー
    • Perl
  • Perlのプログラミングについて

    Perlのプログラミングでつまづきました。 # ファイルから指定文字列を含む行を収集する # 入力ファイルのオープンと読み込み print( "入力ファイル名?" ); $n = <STDIN>; chomp( $n ); open( FIN, "<$n" ) or die "入力ファイルオープンエラー: $!\n"; $n = @a = <FIN>; close( FIN ); print( "$n 行読み込みました\n" ); # 行の収集 print( "検索文字列?" ); $x = <STDIN>; chomp( $x ); $ptn = $x; #指定の文字列 $x = @b = grep( /$ptn/, @a ); print( "$x 行見つかりました\n" ); # 出力ファイルのオープンと書き出し print( "出力ファイル名?" ); $y = <STDIN>; chomp( $y ); open( FOUT, ">$y" ) or die "出力ファイルオープンエラー: $!\n"; print FOUT ( $ptn, "\n" ); print FOUT ( $x, "\n" ); print FOUT ( @b ); close( FOUT ); というプログラムで実行すると C:\My Perl\pl>perl プログラムの実行.pl 入力ファイル名?sample1.txt 168 行読み込みました 検索文字列?k 45 行見つかりました 出力ファイル名?out3-24.txt 続行するには何かキーを押してください . . . となり出力ファイルの中身が表示されません。 どこを間違えているのかご指摘いただけないでしょうか?

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

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

    • ベストアンサー
    • Perl
  • perl 計算結果をファイルへ出力したい

    perl やり始めたばかりです。宜しくお願いします。 入力ファイル data.txt があるとします。 data.txt は、 123 456 789 333 555 777 以上のようなテキストファイルといたします。このファイルを 以下の様に100分の1にして出力したい。 1.23 4.56 7.89 3.33 5.55 7.77 と言うことで、この場で教えていただきました。それが、以下です。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); foreach $line (@x){ chomp($line); @elms = split(' ',$line); foreach $data (@elms){ print $data/100," "; } print "\n"; } おかげ様でこれはこれで上手く動きました。そこで、出力値をファイルに 書き込みたいのです。 もちろん、以下の様な方法でファイルに 書き込めるのは判っております。 計算プログラム.pl > outfile.txt しかし、上のプログラムをベースにファイルに書き込めないかと色々と 試してはみましたが、どうも上手く行きません。 どなたか教えて頂けないでしょうか? 宜しくお願い申し上げます。

    • ベストアンサー
    • Perl
  • perlでxmlファイルを検索して表示する方法

    perlであるxmlファイルを検索して xmlファイルを表示する方法についてお伺いします c:\ -A --X 1.xml 2.jpg 3.jpg --Y --Z このような構造でxからzまでのディレクトリをさがして 「.xml」のファイルの中にある文字列「uuuuu」があれば そのファイルのリストを出力して、クリックすると表示 させたいのですが、perlでできますでしょうか このときファイルのリストを出力するときに 実際のファイル名を.xmlにある特定のタグについて囲まれた 文字列を表示したいと思っています。 (<name>abcde</name>) また「uuuuu」は任意で入力を要求するようにしたいと 思っています。 私ができることはテキストファイルの中身を表示するくらいです open (FILE, 'c:\A\X\1.xml') or die "$!"; while (my $line = <FILE>){ chomp $line; print "$line\n"; } close (FILE); ほかにこのような参考書、urlなどありましたら教えて いただけると幸いです よろしくお願いします

  • 文字列を指定して,別のファイルでその文字列が存在する行を出力する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを用いてプログラムをしております. この度,皆様にご意見をうかがいたいのは,「文字列を指定して,別のファイルでその文字列が存在する行を出力する」という内容です. まず,以下のテキストファイルがあります. data.txt ---------------------- A BA C DA E FA G sansyo.txt ----------------------------- B D F ------------------------------- 処理として,data.txtでsansyo.txtの行が "含まれる"行数を出力する ------------------------------- output.txt ------------------------------- 2 4 6 ここで自分なりにプログラムを組んでみました. ----------------------------------- open(FILE, "sansyo.txt"); open(FILE2,"data.txt"); @file = <FILE>; close(FILE); @file2 = <FILE2>; close(FILE2); foreach $line (@file) { foreach $line2 (@file2) { if ($line =~ $line2){ $hit = $.; } open(NEWFILE, " >> output.txt") or die "$!"; print NEWFILE $hit; close(NEWFILE); } } #ここまで ------------------------------------- ですが,永久ループに入ってしまったようにファイルはできるのですが, 出力されてきません. 間違っている点をご指摘ください.

    • ベストアンサー
    • Perl
  • Perlでファイルを読み込みタグを削除する方法

    以下のようなソースを書きました。 HTMLファイルを読み込み、タグを全て削除して他のファイルに書き込むソースです。 しかし、上手く動作しません。 問題点を教えていただけませんでしょうか。 お願いします。 #!/usr/local/bin/perl package www3sub2; sub main(){ open(FH, "<googlefile3_.txt"); my @file = <FH>; close(FH); open(OUTB,"> googlefile6.txt"); foreach(@file){ my $line = $_; $line =~ s/<("[^"]*"|'[^']*'|[^'">])*>//g; print OUTB "$line"; close(OUTB); } } 1;

  • 指定の行数目から行を抽出する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを使っています. Perlでしたいことは,「指定の行数目から行を抽出する」ことです. 具体的には以下のようにしたいと思っております. data.txt A B C D E F line.txt 2 4 6 output.txt B D F 先ほどある方からサンプルソースを教えてもらったのでそれをベースに作ってみましたが,出力のoutput.txtが空のままです. use strict; use warnings; use feature ':5.10'; use IO::File; open my $file2, '<', 'line.txt' or die "can't open input $!"; chomp(my @subjects = <$file2>); close $file2; open my $newfile, '>>', 'data_out.txt' or die "can't open output $!"; open my $file, '<', 'data.txt' or die "can't open input $!"; while (my $line = <$file>) { chomp $line; foreach my $line (@line) { print $line; if ($. eq $subjects){ say {$newfile} $line; } } } close $file; close $newfile; どこが間違っているのでしょうか.ご指摘ください.よろしくお願いします.

    • ベストアンサー
    • Perl
  • perlでCSV形式ファイルのアップロード

    本日、同じ質問をしたものです。 前回の問題は解決したのですが、ファイルがアップロードできないで悩んでします。 CGIのプログラムは以下のソースです。 #! c:/perl/bin/perl use CGI; # CGIヘッダーの出力 print "Content-type: text/html\n\n"; my ($query,$fileName); $query = new CGI; $fileName = $query->param('fileName'); open(OUT, ">./a.csv"); binmode(OUT); while(read($fileName,$buffer,1024)) { print OUT $buffer; } close(OUT); close($fileName); #ファイルハンドルをcloseしています。 exit ; ファイルは、作られるのですが、中身が書き込まれません。 どなたか教えてください。 お願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう