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

要回答原始问题,错误消息已经说明了错误发生的位置:

ini<=i<=: Expression is not complete; more tokens expected.的内容扩展的结果((i<=$sep_mx))

如果$sep_mx包含一个空字符串,就会发生这种情况,这反过来又是

vr=`$line`

导致 avr不包含您在 awk 行的 split() 函数中包含的分隔符字符串。

请注意,awk split() 的第三个参数是一个正则表达式。如果你想分割“@#;”中的任何字符,你应该把它变成一个字符集,用方括号括起来。

相比:

$ 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

好的,让那个东西工作了。

逻辑:将采用字符串的代码,根据定义的分隔符将其分解为单词并将每个单词作为数组元素。

为了让事情变得更简单,我删除了您问题中指定的另外两个 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 回答