• 締切済み

awkとsedを使ってある単語が何回出てきているのかという頻度を調べたいのですが、誰か助けて下さい!!!

まず、単語とその単語の得点が書かれてあるファイルがあります。 ●ファイル例(番号、単語名、得点) 1_フリップフロップ______________3510.00 2_入力________________________2.00032 3_回路__________________________23.666 4_出力__________________________230.00 5_状態__________________________325.04 6_順序回路____________________220.90 7_入力端子____________________71.020 8_論理_____________________1.0000003 9_マスタフリップフロップ_________143.70 10_パルス幅_____________________35.55 11_TCP/IP___________________6666.6 ・ ・ ・ ある文章中に、このファイルの単語が出現する回数と、各々の単語の得点の合計、 すべての単語の得点の総得点を出力させたいのです。 出力としては次のような形が理想です。 ●出力ファイル例(はじめに総得点、その下に番号、単語名、得点、出現回数、合計) 文章の総得点_=_35553836.07327262 1_フリップフロップ______________3510.00_____________23___________80730.00 2_入力________________________2.00032_____________19___________38.00608 3_回路__________________________23.666_____________14____________331.324 4_出力__________________________230.00_____________17____________3910.00 5_状態__________________________325.04_______________4____________1300.16 6_順序回路____________________220.90_______________8____________1767.20 7_入力端子____________________71.020______________15____________1065.30 8_論理_____________________1.0000003_______________6_________6.0000018 9_マスタフリップフロップ_________143.70_______________7_____________1005.90 10_パルス幅_____________________35.55______________15______________533.25 11_TCP/IP___________________6666.6________________9_____________59999.4 ・ ・ ・ なお、得点の桁はできるだけどのような桁も表示できるようにしたいと考えています。 またファイル中の「_」は空白を意味しています。 どなたかどうかよろしくお願いします!!!!!!!!

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

本来のデータがどんなものか見当がつかなかったので、ファイル例にあるテキストを そのままテキストファイルとして#1のお礼欄にあったスクリプトを使って実行してみましたが >しかし、『文章の総得点』の値と各々の単語の『出現回数』の値が0になってしまいます。 少なくとも0にはなっていませんでしたよ。 可能なら、その状況が起こる入力データと、使っているawkがどういうのものなのか(とりあえずOS名あたりでよいです)を 補足してください。 入力データはできれば必要最小限に切り詰めておいてください。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

その他(プログラミング)辺りに移ったほうがいいと思いますが、それはおいといて。 >今の段階では次のプログラムがわかっているのですが、うまく出力されずに困っています。。。 具体的にどのような問題があるのでしょう。 「フリップフロップ」や「回路」などに対応するの数値がおかしいとかですか?

GodSalad
質問者

補足

回答ありがとうございます! 出力ファイルに『番号』と『単語名』はきれいに表示されます。 しかし、『文章の総得点』の値と各々の単語の『出現回数』の値が0になってしまいます。 また、各々の単語の『得点』の値がもともとのリストの値と違っていたり、『合計』が表示されないという状況であります。 どこをどうしたらいいのか理解できず、泣きそうです。。。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

awkとsedでやれって、ここはC/C++用の場所ですが? あと、スクリプト(プログラム)の作成依頼(丸投げ)でしたら 禁止項目にひっかかりますよ。 書きかけでも何でもあるのならそれも出したほうがアドバイスがもらえるでしょう。

GodSalad
質問者

お礼

ご指摘ありがとうございます。 awkとsedを載せる場所が探せず、C/C+の項目に質問せざるをえませんでした。 今の段階では次のプログラムがわかっているのですが、うまく出力されずに困っています。。。 BEGIN\ .... { .... file = "Points.txt" .... for (Points_length=0 ; getline buffer < file ; ++Points_length) .... .... { .... .... split (buffer, fields, /[ \t]+/) .... .... CountOf [fields [2]] = 0 .... .... Number [Points_length] = fields [1] .... .... Words [Points_length] = fields [2] .... .... Scores [Points_length] = fields [3] .... .... } .... close (file) .... } {for (word in CountOf) CountOf [word] += split ($0, _, word) - 1} END\ .... { .... Total = 0 .... for (i=0; i<Points_length; ++i) .... .... { .... .... Counts [i] = CountOf [Words [i]] .... .... Total += SubTotals [i] = Scores [i] * Counts [i] .... .... } .... print "文章の総得点:", Total .... for (i=0; i<Points_length; ++i) .... .... {print Number [i], Words [i], Scores [i], Counts [i], SubTotals [i]} .... }

関連するQ&A