• 締切済み

変数に格納されている特定の文字列のフィールド番号を抜き出したいと考えて

変数に格納されている特定の文字列のフィールド番号を抜き出したいと考えております。 お世話になります。 現在、変数に格納されている特定の文字列のフィールド番号を抜き出したいと考えております。 例として下記名前を指定した変数が有るとします。 NAMEFILE="愛 麻衣 美衣 魔印" このとき「美衣」をgrepすると「3」を言う数値を返したいと考えております。 色々探して「match関数の RSTART」にて行いたい事と近い事が出来たのですが、 開始文字を抜き出す為、かえってくる数値は「6」となってしまいます。 行いたい事として、この場合区切り文字をスペースとし左側から数を抜き出したいのですが 何か良い情報は有りませんでしょうか。 知恵をお借りできたらと存じます。よろしくお願い致します。

みんなの回答

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

もしかして、splitコマンドを実行したのでしょうか?awkのsplit関数ですよ。 awk -v X="$NAMEFILE" 'BEGIN{n=split(X,a,/ +/);for(i=1;i<=n;i++){if(a[i] ~ /美衣/) {print i}}}' ただ、基本的にやっていることは、お書きのfor文と同じですね。 awkでの大きな処理の一部分として上記処理が必要と言うことでない限り、for文が良いでしょう。 なお、echoは不要で、下記で良いです。 count=0 for i in $NAMEFILE do count=$((count + 1)) if [ "$i" = "美衣" ] ;then echo $count fi done

nagaraja
質問者

補足

notnot 様 返答が遅くなり申し訳ございません。 > もしかして、splitコマンドを実行したのでしょうか?awkのsplit関数ですよ。 大変失礼致しました。思いつかない辺り、無知かげんが伺えますね。 記載内容にて、行うことが出来ました。 なかなかさわる事が出来ないのですが、少しづつでも 使いこさせるようになりたいと考えております。 ありがとうございました。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

match/RSTARTということはawkの話ですかね。 n=split(NAMEFILE,a,/ +/) して、for(i=1;i<=n;i++){if(a[i] ~ /美衣/) { print i }} とか。

nagaraja
質問者

補足

notnot 様 ご解答ありがとうございます。 現在行おうとしている環境はbashでコマンド上か、シェルスクリプトにて 実行したいと考えております。 > match/RSTARTということはawkの話ですかね。 はい。例えば以下の様な方法で、行いたい事はとりあえず出来るのですが 短く早く出来ないかな?と考え、「awk」ではどうだろう。と 言う所から始めました。 ---------------------------------------- NAMEFILE="愛 麻衣 美衣 魔印" for i in `echo $NAMEFILE` do count=$((count + 1)) if [ "$i" = "美衣" ] ;then echo $count fi done ---------------------------------------- > n=split(NAMEFILE,a,/ +/) して、for(i=1;i<=n;i++){if(a[i] ~ /美衣/) { print i }} とか。 「split」に関しては大きいファイルを分割する事しか行ったことがなかった為調べたのですが、 どうやら実行出来ないようです。 (実際にエラーとなってしまいました…) RubyやPython、JavaScript等では細かく出来る様でびっくりしました。

関連するQ&A

  • 特定のフィールドの文字列を取得

    初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • 変数に格納している文字列の読み込み

    ある変数($text)にHTMLデータが格納されています。 その変数内の文字列を、1行ずつ読み込む方法はあるのでしょうか。 $textをファイルに変換して読み込むべきでしょうか。 ぞ存知の方、ご教授をお願いします。

    • ベストアンサー
    • PHP
  • 変数の中身から特定の文字を置き換える

    $testという変数に、 あいうえお<br>かきくけこ<br>さしすせそ<br> という文字列が格納されているとします。 この時、含まれている特定の文字(ここでは<br>)をスペースに置き換えて、 あいうえお かきくけこ さしすせそ と表示したいのですが、どうすればいいでしょうか?

    • ベストアンサー
    • PHP
  • アスタリスクを文字列として変数に入れるには

    HP-UX cshで、アスタリスクを文字列として 変数に入れるにはどうしたら良いでしょうか? 現在は <file3の中身> grep -v file*.txt | grep -v file2.txt で、 set hensu=`cat file3.txt`としてecho $hensuすると grep -v file1.txt file2.txt file3.txt | grep -v file2.txt という具合に、アスタリスクがワイルドカードとして 働きます。これを「file*.txt」という文字列として 変数に入れる方法を教えてください。 宜しくお願いします。

  • 正規表現を使った文字列の抽出方法について

    正規表現を使った文字列の抽出方法について RHELを使っています。 テキストデータの中に、以下のようなデータが 百万行単位で並んでいます。(カンマ区切り、2列構成) 1, 1.24425 2, 3.25252 (中略) 13, 6.25365 14, 8,36222 (中略) 103633, 252525.0 最終的にやりたいことは2列目のデータのみの抽出です。 考え方として、正規表現で 「<任意の文字列の連続><カンマ>」という文字列を認識させ、 それを「空欄」で置換したいと考えています。 文字列の最後の文字をマッチさせる指定子が「$」という情報をWebで見つけたので まず、grepで見つけられるか以下のようにやってみたのですが、 grep -i ",$" test.txt $が環境変数と取られ、構文エラーとなってしまいます。 使い方がおかしいのでしょうか? ちなみに、うすうす感じている疑問として、「$」は文末にくるものしかマッチしなかったり しますでしょうか? カンマ区切りなので、表計算ソフトを使えなくもないですが、 行数がExcel2007の限界をよく超えるので、それ以外の方法で考えています。 アドバイスよろしくお願いいたします。

  • 配列にある文字列を1つの変数に改行付きで格納する方法

    配列にある文字列を1つの変数に改行付きで格納する方法 Array ( [0] => レタス [1] => トマト [2] => きゅうり ) などの配列を $yasai 変数へ ------ レタス トマト きゅうり ------ と格納してテキスト表示させたいのですが、どのようにすれば可能でしょうか? そもそも可能なのでしょうか?ご存知の方、いらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • PHP
  • 変数格納  クォーテーション「あり」「なし」の違い

    変数格納する際、クォーテーション「あり」「なし」の違いはあるのでしょうか? ■質問背景 ・配列作成する際、クォーテーション「なし」でできたのに、取り出す際はクォーテーション付与しないとうまくいかなかった ・具体的には、"id" => '1', と変更したらうまくいった array(   0 => array     (       "id" => 1,       "city" => "tokyo"     ), ■質問 ・下記の違いは何でしょうか? ・文字列として格納するか数値として格納するかの違い? $hoge = 1; $hoge = '1'; $hoge = "1"; ・クォーテーションなしで変数に格納出来るのは数値だけ? $hoge = 文字列;

    • ベストアンサー
    • PHP
  • 長さ0の文字列を格納できません。とエラー発生して困っています。

    アクセスのデータベースのフィールド1~20ぐらいのを各テキストボックスに表示させています。そこでテキストボックス内の文字や数値を変更して更新したいのですが、変更や追加は今の所可能ですが、データを空にすると「長さ0の文字列は格納できません。」と表示されます。 みなさんはこの様な時、空のデータにするにはどの様にされていますか?

  • SharedObjectに変数を格納したいのですが、、

    最近Flashの勉強を始めたばかりで、この件についてどう調べても分からないので教えていただけませんでしょうか。 SharedObjectに、数値や文字列を保存することはできるのですが、 変数をそのまま保存する方法はありますでしょうか。 XMLからデータを読み込み ⇒ 読み込んだデータをSharedObjectに保存 ⇒ SharedObjectから呼び出して利用 という流れを作りたいと考えています。 具体的には、XMLから読み込んだデータを変数Aに格納して、変数AをSharedObjectに保存しようとしているところがうまく行かず、困っています。。 良い方法がありましたらご教授ください。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 表示桁数をそろえた文字列を変数に格納したい

    ログファイルを、時間で検索するシェルスクリプトを作成したいと考えています。 変数searchStr に、ログから検索対象となる時間をループで生成したい。 例:「Jun 23 00:23」(※この文字列を作成したい。) 以下スクリプト作成しましたが 結果として、変数h、mが、1~9の時、searchStr は「Jun 23 0:23」や「Jun 23 0:3」になります。 時間と分の桁数が、変数が1ケタの場合、1→01としたい。 printfの%2dとか指定し、変数に入れてみたりしたのですが上手く文字列を生成することが出来ないのです。 (searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。) #!/bin/bash for((h=0;h<24;h++)) do for ((m=0;m<59;m++)) do searchStr="Jun 23 "$h":"$m echo $searchStr #文字列確認 cat ログファイル | grep searchStr #ここで検索するための文字列を作成したい。 done done 良い解決方法がありましたら、ご教示お願いします。