0

私はこのエラーを受け取ります:i<=: Expression is not complete; more tokens expected.これはコードです:

vr=`$line`
set sep_mx=`echo $vr | awk '{
    n=split($0,x,"@#;")
    print n
}'`

echo $sep_mx
i=1 && while ((i<=$sep_mx))
do                                       
    echo $vr | awk -v er=$i '{
         n=split($0,x,"@#;")
         print x[er]
    }'
    ((i+=1))
done

誰でも私を助けることができますか?ありがとう

4

2 に答える 2

1

元の質問に答えるために、エラーメッセージはエラーが発生した場所をすでに説明しています:

in i<=ini<=: Expression is not complete; more tokens expected.は の内容を展開した結果です((i<=$sep_mx))

これは$sep_mx、空の文字列が含まれている場合に発生し、次の結果になります。

vr=`$line`

その結果vr、 awk 行の split() 関数に含めた区切り文字列が含まれません。

awk split() の 3 番目の引数は正規表現であることに注意してください。「@#;」内のいずれかの文字で分割したい場合は、角括弧で囲んで文字セットに変換する必要があります。

比較:

$ echo "@fee#fie@foe" | awk '{ print split($0,x,"[@#;]") }'
4

と:

$ echo "@fee#fie@foe" | awk '{ print split($0,x,"@#;") }'
1
于 2013-06-09T22:21:08.773 に答える
1

わかりました、それはうまくいきました。

ロジック : string を受け取り、定義された区切り文字に基づいて単語に分割し、それぞれを配列要素として配置するコード。

もう少し簡単にするために、質問で指定された他の 2 つの delim オプション (# と ;) を削除しました。

作業コード:

Kaizen ~/so_test $ cat zawk1.sh
echo "entter a line : " ;
read line ;

vr="$line";

      sep_mx=`echo $vr| awk '{ n=split($0,x,"@"); print n }'` ; 
      echo $sep_mx ;  ## here the number of substring produced is calc.

      while [ $i -le $sep_mx ]
      do
          ## would print individual substring one at a time as the counter increases.
          echo $vr | awk -v er=$i '{ n=split($0,x,"@"); print x[er] }' ;
          i=$(( $i + 1 ));
      done

出力:

 Kaizen ~/so_test $ ./zawk1.sh
 entter a line :
 hello@world@how@are@you
 5
 hello
 world
 how
 are
 you

お役に立てれば !!

于 2013-06-05T16:15:29.073 に答える