質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1271閲覧

フォルダ内における,関数の呼び出し関数を求めるスクリプトを書きたい

takechankurocha

総合スコア14

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2017/12/20 06:30

編集2017/12/20 07:21

###前提
フォルダ内のとあるファイル内で定義された関数が,そのフォルダ内でどのくらいの回数を呼び出されたか,結果出力するスクリプトを書きたいと思っています.

###実現したいこと

hoge.rb def initialize(user)

例えば,上記の「hoge.rb」内で関数'initialize'が定義されている場合に,この関数'initialize'がカレントディレクトリとカレントディレクトリ以下の階層において,何度呼び出されたかという回数を調べたいと考えております.

###期待する出力結果

関数initialize 8回 関数hoge 6回 関数test 5回 関数name 4回 関数mahara 3回    ・      ・      ・      ・ 関数bob 1回

最終的な期待される出力結果として,上記のように該当するフォルダ内でスクリプトを叩いた際に,関数の呼び出し回数が多い上位10の関数が回数でソートされて出力される結果となるようなスクリプトを書きたいです.
恐縮ですが,ご教授して頂いたら幸いです.よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正確に文法解析までしなくて、grepレベルでいいんですよね?

Bash

1# def の後の[a-z0-9_]の並びのリストを作る 2grep -oP '^\s*def\s*\K([a-z0-9_]+)' hoge.rb|sort -u > method.list 3 4# カレントディレクトリ以下の *.rb ファイルからリストの文字列を探して、個数をカウント 5find . -name "*.rb" | xargs fgrep -howR -f method.list | sort | uniq -c

投稿2017/12/20 12:20

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takechankurocha

2017/12/21 01:27

ご回答ありがとうございます. 一つ質問なんですけども,仮にディレクトリ内に"hoge.rb"だけでなく別名の"*.rb"で宣言されているファイルが複数ある場合に,defの後の[a-z0-9_]の並びのリストを作る場合は,どういった構文にするべきでしょうか?
otn

2017/12/21 02:40

hoge.rbの所を、目的とするファイル名を書けばいいです。
takechankurocha

2017/12/21 07:02

何度もすいません. その都度書くということですよね? 逐一ファイル名を書いていくのではなく,ディレクトリ直下のファイルを一気に読み込みしたいと考えておりました.
otn

2017/12/21 14:59

回答をちゃんと読めば、そういう場合はfindとxargsを使えば良いことが分かると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問