• 締切済み

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

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

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答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% (4900/10358)
回答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等では細かく出来る様でびっくりしました。