• ベストアンサー

Bシェルでファイルで文字の数を数えたい。

誰か教えてください。 シェル初心者です。 ファイルにある特定の文字の数を数えたいのです。 ファイルの内容 tttattttatttttatttttatttt tttttattttatttattttattttt tttattatttttttattttattatt tttattttttatttttatttttttt 行ごとに aの数 4、4、5、3 をの値を取りたいです。 お願いします。

  • toroo
  • お礼率100% (9/9)

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

  • ベストアンサー
  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.1

私なら、こういうのはシェルでなく Perl でやりますが… 取りあえず、こんなところでどうでしょうか? ―――――――――――――――――――― cat filename | while read X do   A=`echo $X | sed 's/[^a]//g' | wc -c`   echo `expr $A - 1` done ―――――――――――――――――――― filename の内容がご質問のデータだとすると、これを実行すれば 4 4 5 3 と表示されます。 A の値から1を引いているのは、改行コードの分を除くためです。 それぞれのコマンドの意味は、man コマンドで調べて下さい。 それでもわからないところがあれば、補足をお願いします。

toroo
質問者

お礼

早速の回答ありがとうございます。 Perlではなくbchを勉強しようと作っているもので。。。 ごめんなさい調べるより質問した方が早いかなとおもって。。。 試してみます。 ありがとうございました。助かりました。 うまくいってから締め切りたいと思います。

toroo
質問者

補足

補足ではないです。 お礼です。 wcコマンドを知りませんでした。 とても助かりました。 解決しました。

関連するQ&A

  • ファイルA、ファイルBの各々1行ずつをreadして結合するシェル

    シェル初心者です。 ファイルA、ファイルBの各々1行ずつをreadして結合するシェルを作りたいのです。 ファイルA:  1 2 3 4 5 6 ::::: ファイルB: 7 8 9 10 :::: 結果の結合ファイル: 1 2 3 7 8 4 5 6 9 10 :::::::::: :::::::::: 各ファイルは、列数(=フィールド数)が異なりますが、行数は同じです。 while ~ read のループでは、うまくいきませんでした。 どなたか、よろしくお願いします。

  • Bシェルでファイル中の文字列置換の方法について

    Bシェルで複数のファイルを読み込み、 ファイル中のデータの先頭から6バイトがある特定の文字列の場合はそのままで、特定の文字列以外は空白に置換して出力したいのですが、 どのようにすればよいのでしょうか? お手数ですが、ご教示ください。

  • Solaris7のCシェル文字数制限について

    Solaris7でCシェルスクリプトを使っています。 lsで拾ったファイル名をforeach文でまわしてみたのですが 文字数(ファイル数?)の制限に引っかかってしまいうまく回りません。 そこで質問なのですが、 Solaris7のCシェルforeach文で回せる文字数の限度をご存知の方いらっしゃいましたらご教授下さい。 宜しくお願い致します。

  • shシェルでのファイル操作

    初心者です。 shシェルであるファイルの先頭行及び最終行を削除して別ファイル(新規)に書き出したいのですが、何か良い方法があれば教えてください。 (例) 元ファイル(AAA)の内容 1234567 aaaaaaa bbbbbbb ccccccc 7654321 削除後のファイル(BBB)の内容 aaaaaaa bbbbbbb ccccccc

  • シェルで文字列を置換したい。

    UNIXのシェルであるファイルに書かれている文字から ある文字列を置換してそのファイルの中身を書き換えたいのですが どう書いていいのかわかりません。 ファイルを読み込んで該当の文字列を含んだ行を 見つけるところまではいったのですが・・・。 どなたか教えてください! よろしくお願いします。

  • 100文字が並ぶテキストを10行10列にする方法(Bシェルにて)

    100文字が並ぶテキストをBシェルにて10行10列にする方法を教えてください。 テキスト(test.txt)には、次のようにスペースで区切られて100文字入っています。(この例の様に規則性はありません) 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 ..(省略) ↓これを 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 (省略) の様にするやり方を教えてください。 Bシェル初心者です。宜しくお願い致します。

  • ファイルの中身を消したい場合のコマンド(Bシェル)を教えてください

    シェルでファイル(textファイル)の中身を削除したいのですが、 Googleで調べても、「ファイル・ディレクトリの削除」のコマンドはあるのですが、「ファイルの中身の削除」の方法がわかりません。 ファイルの中身を空にして、空のファイルだけを残しておく方法は無いのでしょうか? また、空になったファイルが存在できないのなら、ある文字(たとえば'a*.a')をファイルの内容として書いておきたいと思います。 どうぞ宜しくお願いいたします。

  • [Kシェル] ファイル読み込み

    最近Kシェルを始めたばかりでつまづいています。 あるログファイルの行を取得して、 その行のn番目の値を合算したいです。 例:ログファイルの中身 1,1000,AAAA,10000, 2,1000,EEEE,1000, 3,1005,CCCC,1050, ※上記で4番目を合算する場合、  12050と出力したいです。 以前Cシェルを使用していたので、 foreachのような動きを考えていたのですが、 参考書を見ると効率的でない(readを使う) という記載がされています。 ログが数万行に達する可能性があるので、 効率的なやりかたを模索していますが、 何かよい方法がありますでしょうか。 よろしくお願いいたします。

  • ファイル内の改行を削除し1行にするシェル

    お世話になっております。 ファイル(テキスト)内には、改行を含んだ複数の行が記述されています。 これを1行にして上書き保存するシェルを実行をするための シェルを作成したいと思っています。 ファイル内には以下のような値が改行を含んで入っています。 123 456 789 →これを、「123456789」と改行を取り除き、既存のファイルの上書き保存をしたい なお、改行を含んだ対象のファイルは、ファイル名にある文字を含む ファイルのみに対して行いたいのですが。 例:ファイル名に、「*abc*」、「*def*」、「*xyz*」を含むファイルが対象 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 cat 入力ファイル名 | tr -d '\n' > 変換後の出力ファイル名 ご教授いただきたく、よろしくお願いします。

  • A4幅のエクセルファイルの1行に入る文字数について

    お世話になります。 エクセルで契約書を作っています。 ちなみにネットよりダウンロードした無料テンプレートを使ってます。 それを開くと、左側にずらずら契約書の内容が書いてあり、右側にも同じ内容が書いてあります。 文章の内容は今回どうでもいいんですが。 左ページは編集できますが、右側は選択すら出来ません。 左側を書き換えたり編集すれば自動的に右側に反映されます。 ちなみに、左側を10行ぐらいまとめて削除すると右側の文字が縦長にぼけます。 20行ぐらい削除するとさらに縦長になり読めないほどです。 これってどういった機能でしょうか? もう一つ気になるのは、 左のページの横幅ですが普通のA4の幅のエクセルファイルより広い気がしますし、実際文字もたくさん入ります。 何と言いますか、試しに左ページに書いてある内容を1行丸ごとコピーしてA4のエクセルファイルペーストすると入りきらず10文字以上、文字がはみ出てしまいます。 印刷プレビューで確認しても、実際に印刷しても途中で切れてます。 しかし、テンプレートの方で印刷すると同じ文字数(同じフォント同じ大きさ)なのに全く切れてないです。 ただ、どちらのファイルもは印刷プレビュー後、閉じてみるとみると、A4のファイルの方はA4の大きさで点線枠が表示されるのに対しテンプレートの方は何故か表示されません。 これは何が原因ですか? 調整するにはどうすれば宜しいでしょうか? できればテンプレートと同じようになるべく文字数が入るファイルを作りたいのですが。 ご教授のほど宜しくお願いします。 エクセルは2007です。

専門家に質問してみよう