• ベストアンサー

行ごとに文字列をカウント

以下のような巨大なタブ区切りテキストファイルがあります。 <input.txt> A1 1 2 3 4 A2 none 2 4 6 A3 none none none 1 A4 none none none none .... このファイルの行ごとに"none"の数をカウントさせてout.txtファイルを作りたいです。 <out.txt> 0 1 3 4 .... perlやruby、pythonなどでできる方法が教えていただきたいです。

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

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

色んな方法あるだろうけど perl -ne '$n=0; /\bnone\b(*SKIP)(?{$n++})(*FAIL)/; print "$n\n"' input.txt

その他の回答 (1)

  • kteds
  • ベストアンサー率42% (1876/4424)
回答No.1

perlやruby、pythonではありませんがwin10標準搭載のpowershellでは下記の通りになります。 foreach ($i in Get-Content e:\input.txt) { ($i | Select-String -pattern "none" -AllMatches).matches.count} input.txtの各行を読んで指定文字列の出現回数を取得しています。 実行結果は添付画像参照。

関連するQ&A

  • 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
  • 検索した文字列がある行を検索するには

    OPEN "A.txt" QWER gohjoij OPEN "B.txt" OPEN "QWERT" Write A.txt jortyu end と書かれたテキストファイル(ファイル名を"ABC.txt"とする。)があるとします。これを 1.OPEN "*.*"(*=ワイルドカード)という文字列の*.*のみに絞る 2."1."の内" "の中に、"."が無い文字列は無視する うえでリッチテキストボックス1に出力するようにします。リッチテキストボックス1には A.txt B.txt と出力されました。これをさらに[A.txt B.txt]がある行全体を、 1.別のリッチテキストボックス(リッチテキストボックス2)に出力する やり方がわかりません。この例だと、リッチテキストボックス2には OPEN "A.txt" OPEN "B.txt" Write A.txt jortyu と出力したいです。今のスキルだと到底作れそうに無いので、どなたか教えてください。

  • Perl。文字出現回数を重複しないでカウントしたい。

    perl初心者です。どうぞ助けて下さい。 以下のようにデータがならんでいる時、 pphhhppphhhppppppphhppppppppppppppppppphhh pが連続した文字の連続数は 2、3、7、19 となります。 今、知りたいのはこのようなpの連続数の出現回数です。つまり、たとえばpが19回連続してあるものは何回でてきたか、が知りたいのです。 上の例だと1回が正解となります。 ところが、スクリプトを書くとき、 たとえば以下のようにしたとき、 pが19回なら重複カウントはなくても、 pを2でカウントしたら、 本当に出てきて欲しいこたえは一回なのに、 P=3、7、19のどれにも該当してしまいます。 #!/usr/bin/perl ; open(IN, "text1.txt") or die ; open(OUT, ">text1out.txt"); while(<IN>) { chomp ; if (/(\S+)/) { $name = $1 ; if ($name =~ /^ppppppppppppppppppp/) { {$count++;} ; } print OUT "$count\n" ; } } close (IN) ; close (OUT) ; 正規表現の中を工夫すればいいのだと思いますが、 大変困っております。宜しくお願いします。

    • ベストアンサー
    • Perl
  • テキストファイルを分割&ページ数を追記しHTMLファイルにするプログラム

    テキストファイルを分割&ページ数を追記しHTMLファイルにするプログラムを教えてください。 (Perl/Ruby/Pythonのいずれかで) テキストファイルを分割&ページ数を追記しHTMLファイルにするプログラムを教えてください。 (Perl/Ruby/Pythonのいずれかで) 手元にあるテキストファイルを指定の行数(もしくは文字数)で分割しHTMLファイルにしたいと考えています。 [sample.txt(10分割)→1.html~10.html] フリーの分割ソフトはあるようですが ・分割とHTML化を同時にしたい ・ページ下部にファイルに対応したページ番号がつけたい  (1.htmlの下部に:<p>1ページ</p>のようなイメージ) ・最近プログラミングの勉強をしていていろんなコードを見てみたい という理由で利用しないつもりです。 何卒よろしくお願いいたします。

  • 行単位で並び替えて、重複行を削除したい

    WindowsXPです。 テキストファイル、A.TXTがあり、10000行くらいなのですが、 行単位で並べ替えて、重複している同じものがあれば、これを1行にまとめたいのです。 並べ替えだけならば、MSDOSで、 sort A.TXT > outfile.TXT でいけそうですが、重複行をまとめることは出来そうにありません。 バッチファイルで処理をしたいのでMSDOSで捜しているのですが方法はないのでしょうか。 MSDOSに限らないとすれば、何か簡単にできる方法はありますか。 何かスクリプトみたいな感じで出来るといろいろと応用が出来ていいのですが。 関連して、WindowsXPでも、PERLが使えると聞きました。 WEBで捜しましたが、どうもどれがいいのか、また、インストール方法もよくわかりません。 フリーで使える、Windows上のPERL、あるいは、MSDOS以上に使い勝手のよいスクリプトがあれば、教えてください。

  • 行ごとでなく文字列を区切りにファイルを読み込む

     非常の大きなテキストファイルを、1行1行ではなく、特定の文字列、 できれば正規表現を区切りとして、100行ぐらいをまとめて順次読み込みたいのですが、 どのようにすればいいでしょうか。よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字列をカウントするにはどうすればいいのでしょうか?

    ファイル読み込み後その中の特定の文字列、「映画」の個数をカウントするというプログラムを次のように作ってみましたが、実際に起動してみるとエラーになります。何かわかる方がいれば教えてください。 #!/usr/local/bin/perl if (open(FH, "data/log.txt")) { @file = <FH>; close(FH); } foreach $count (@file){ $count = ($line =~ tr/映画/映画/); } print $count; exit;

    • ベストアンサー
    • CGI
  • 【Perl】文字列をカウントしたいです。

    以下のようなテキストファイルがあります。(ここで出すのは例なので、本当は1万行くらいあります) 20927258 7092 20927258 7093 21167105 7092 21167105 10469 21167105 10470 21167105 10471 21167105 10472 21167105 10473 21167105 10474 この中に入っている文字列、例えば20927258や10474などがいくつあるかをカウントするためのプログラムを書きたいのですが、どのようにすればよいでしょうか?? 重複があるので、それは消したいです。つまりこの例でいえば 20927258は2つということにしたいです。 よろしくお願いします!!!!

  • C++で文字をカウントするプログラムを・・・

    C++で簡易的な文字をカウントするプログラムを作成しようとしています。 あるtxtファイルがあって、その中に ----------------- nannchara8 1234 #kokokara a92kv838 402853 #s82ffr kka0345 #kokomade ----------------- と記述してあります。 #kokokara~#kokomadeに書いてある特定の文字(0やaなど)の数をカウント、ただし、行頭に#のついているものはカウントしない(上に示したtxtファイル内の文字「8」のカウント結果は3・・・みたいな」)。 そんなプログラムを作りたいのですが どのようにすればいいでしょうか? ご教授願います。

  • C++ 文字数カウントについて。

    こんにちは。 C++ についてお尋ねします。 下のx.txtをインプットすると、y.txtがアウトプットされるC++プログラムを作りたいです。 while { } を使うことが条件です。しかし、なかなか出来ません。 while { } で文字数カウントの方法を中心に教えてください。 よろしくお願いします。 大文字、小文字共にカウントします。 例: A と a 両方カウントします。 x.txt の内容--- ll chA chI ll chU chE ll chO jyo ll shi shu ll she sho l nyi nyu nyo ---------------- ↓↓ y.txt の内容------------------- 母音の数、行数、文字数。 a の個数: 1 e の個数: 2 i の個数: 3 o の個数: 4 u の個数: 3 line の個数: 5 総文字数(全てのキャラクター): 68 -----------------------------------

専門家に質問してみよう