ファイルに含まれる文字列がどのくらいの頻度で表示されるのか、どうすればわかりますか?

ファイルに含まれる文字列がどのくらいの頻度で表示されるのか、どうすればわかりますか?

次の形式のURLのリストを含むファイルがあります。

編集する

http://www.google.com/absd/siidfs/kfd837382$%^$&,

www.google.com、

Googleサイト

yahoo.com/list/page/jhfjkshdjf…

次の出力を表示するスクリプトを作成したいと思います。

 google.com : 2
http://www.google.com: 1
yahoo.com : 1 

ファイルからURLを読み取ってファイル全体を再確認する必要がある部分が詰まっています。私はbashスクリプトに初めて触れて何をすべきかわかりません。

ベストアンサー1

ソース入力ファイル

入力形式が次のと仮定します。

http://www.google.com,

www.google.com,

google.com

yahoo.com

結果は次のとおりです。

google.com : 3 
yahoo.com : 1 

現在行われている状況全体を正確に把握することは困難ですが、表示された出力を考慮すると、最初にすべての行が次の形式になるように入力ファイルを変換したいと思います。

google.com
google.com
google.com
yahoo.com

次に、次のコマンドセットを介してファイルを実行します。

$ grep -v "^$" data.txt | \
      sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/\1.\2/' | \
      sort | uniq -c
      3 google.com
      1 yahoo.com

次のように、目的の形式に合わせて出力形式を整理できます。

$ grep -v "^$" data.txt | \
      sed -e 's/,$//' -e 's/.*\.\(.*\)\.\(.*\)$/\1.\2/' | \
      sort | uniq -c | \
      awk '{printf "%s : %s\n", $1, $2}'
      google.com : 3
      yahoo.com : 1

編集#1

OPには後続の質問があり、例の入力を変更しました。したがって、これらの入力を計算するには、次のようにします。

http://www.google.com/absd/siidfs/kfd837382$%^$&,

www.google.com,

google.com

yahoo.com/list/page/jhfjkshdjf...

最初の例では、変更された1行のコードを使用できます。

$ grep -v "^$" data2.txt | \
      sed -e 's/,$//' \
          -e 's#\(http://[^/]\+\).*#\1#' \
          -e '/^[^http]/ s/^www\.//' \
          -e '/^[^http]/ s#\([^/]\+\).*$#\1#' | \
          sort | uniq -c | \
          awk '{printf "%s : %s\n", $1, $2}'
2 : google.com
1 : http://www.google.com
1 : yahoo.com

おすすめ記事