• 締切済み

【Perl】文字列をカウントしたいです。

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

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

みんなの回答

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

ハッシュで数えればいいのでは. my %count; while (my $line = <>) { $count{$_}++ for split ' ', $line; } とか.

関連するQ&A

  • perl文末文字列カウントプログラム

    perl の文字列カウント こんにちは。初質問になります。perのlプログラミングについての質問です。 ある文章の「文末」の文字列をカウントし、出力するプログラムをつくりたいと思っています。 以下の文字列カウントプログラムを元に作りたいのですが、正規表現の文末指定のつけどころが恥ずかしながらわかりません。 <テキストデータ例> やまだくんはみかんを食べています!!たかしくんはりんごを食べています!! ひろしくんは好きなみかんを食べています!! ??よしこさんは嫌いなりんごを食べていますか?? かなえさんはいつもぶどうを食べています(^-^) ひろしくんはみかんが好きです(^-^)しかし、ゆうじくんはみかんは好きではありません(^-^) ひろみさんはみかんとぶどうは嫌いです!!しかし、りんごは好きです。 たとえば上のテキストデータを読み込み 文末のビックリマーク、クエスチョンマークの文字列を検出し 個数をカウントし出力するするようなプログラムです。 <出力結果> (^-^) 2 !! 2 ?? 1 となるようにしたいです。 以下のプログラムだと文末に限らずリストにあてはまる全ての記号がカウントされてしまいます。 @arr = qw('(^-^)','!!','??' ); $fname = "input.txt"; open(IN,"$fname") || &error("Can't open $fname"); read(IN,$buff,-s IN); close (IN); foreach (@arr){ $cnt = scalar( () = $buff =~ /$_/g ); print "$_ $cnt\n"; }

  • テキスト内文字列検索 Perl言語

    テキストファイル内の文字列を「Perl」で検索したいのですが…。 例 aa.txtの中の"AA"を含む1行をデスクトップのbb.txtに追加書き込みをする。AAの部分は外部からのタイプで変化させる。 このようなPerlのプログラム、初心者ですがよろしくお願いします。

  • perlでの特定文字列のカウント

    ご教示お願いいたします。 perlについての質問です。 csvファイル内で、特定のカラムの中の、特定の文字列が何回出現するかマッチする回数をカウントしたいと考えています。 csvの中身は以下のような内容です。 yamada,20220522,jobA tanaka,20220521,jobB takahashi,20220521,jobB このcsvの最後のカラムに検索をかけ、「jobB」がいくつ出没するのかカウントしたいです。 この場合のスクリプトをどのように記述したらよいでしょうか? ワンライナーではなく、スクリプトファイルとしたいです。 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルからある文字列の個数を数えたい

    perl5でunixの"wc"や"grep -c"みたいに1つのファイルの中からある文字列の個数を カウントするスクリプトを作ろうとしています。 ファイルは256文字×10万行くらいのテキストで、 検索する文字列は15文字前後×40個(例えば「apple-000001」「lemon_orange」など)です。 どのようなスクリプトを組んだら効率よく各文字列をカウントできるのでしょうか? それよりwcやgrep -cを40回行った方が早いのでしょうか?

    • ベストアンサー
    • Perl
  • 文字列の比較

    現在Cでプログラムをつくっているのですが いきずまってしまいました。 1.テキストファイルを読み込む 2.書き込みファイルを開く 3.読み込んだデータを一行読み込んで   その行の特定の文字列があれば、   特定の文字列のみ取り出し、   書き込みファイルに書く。    4.次以降の行も同じ処理をする。    5.読み込み、書き込みファイルを閉じる。 と、こんな感じのプログラムなのですが、 3の特定の文字列をどのように取り出せばいいのかわかりません。 取り出したいのが数字ならば、if文でできるのですが 文字列の場合は、どうなんでしょうか。 例えば、「MOJIRETU11」という取り出したいとき 数字と同じようにIF文を使用することは、できるのでしょうか。

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

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

    • ベストアンサー
    • CGI
  • 文字列から数字をカウント

    エクセルバージョン2007 A列に以下の文字列が有る場合、数字の一塊のカウントではなく、文字列に入っています "0,1,2,3,4,5,6,7,8,9" それぞれをカウントする関数をご教授頂ければ幸いです。 12345-67890    → B列に 10 と表示 2aa-12345-00   → B列に 8 と表示 1bb        → B列に 1 と表示 以上、宜しくお願い致します。

  • VB.netで検索した文字の後の文字列を取得

    VB.net(2010)でテキストファイルから特定の文字を検索してその後にある文字列を取得するにはどのようにすれば良いでしょうか。 【具体例】 C:\testフォルダ以下にある複数のtextファイルから"aaa"の文字を検索して、その後にある"xxx"を取得する。(同じ行にある文字列) 【textファイルの中身】 111 aaa xxx 222 ご教示のほど、よろしくお願いします。

  • Excel関数で範囲指定し重複以外の値のカウント

    Excelの関数の使い方で教えていただけないかと思い、投稿しました。 お手数ですが、よろしくお願いします。 ある列の中で、限られた値の行を範囲として、別の列の値を調べて、カウントしたいと思っています。 カウントする値は、重複を除いた値の個数をカウントしたいと思います。 例えば、A列の1~100行までの範囲の中で、A列の101行目に入っている値である文字列の”鈴木”と同じ値がある行のB列の値をカウントしたいと思います。 そのB列のカウントを行う場合、重複する値があれば、1とカウントします。 以上の関数をB列の101行目に記載するとすれば、どのような関数になるのか教えていただければ幸いです。よろしくお願いいたします。

  • Excelで任意の文字を含むセルの1つ下のセルを文字カウント

    関数初心者です。 Excelで任意の文字を含むセルの1つ下のセルを文字カウントする、シンプルでスマートな方法はないでしょうか? 具体的には      A列 1行目 @: インデックス1 2行目 この行の文字数をカウント 3行目 <空白行> 4行目 @: インデックス2 5行目 この行の文字数をカウント 上記のようなケースで「@:」を含むセルの1つ下の行(2,5行目の文字数をカウントしたいのです。 現状では、以下のような不細工な方法でやっています: A列の左隣に列を3つ挿入し(オリジナルのA列がD列になります)、C1に「=FIND("@:", D1)」とした上で関数を最終行までコピー→この例では1,3行目に「1」と表示されます 次にB2に「=IF(C1=1,"TRUE","")」と入力し、これを最終行までコピー→この例では2,5行目に「TRUE」と表示されます 最後にB列にオートフィルタをかけ、TRUEの行だけ表示したうえで、A1に「=LEN(A1)」と入力して、これを最終行までコピーしています→これで、2,5行目の文字数がカウントされます こんなヘタクソな方法ではなく、1つの関数で綺麗に同じ結果を得る方法はないでしょうか? もっと勉強すれば、自分でも出来るかもしれませんが、今すぐ必要なのでどうかご教示ください。

専門家に質問してみよう