1

我有这个变量,其中包含一个由空格分隔的字符串列表

val=00:21:5D:16:F3 00:21:5D:16:F4 00:21:5D:16:F5

我想提取每个字符串分隔的bu空格“”,然后将其分配给val 我使用这个shell代码,但它不起作用

while [ "$((i++))" != "10" ]; do
   val$i=`echo $val | awk '{print $i}'`
   echo "val$i=$val$i"
done

期望的结果是:

val1="00:21:5D:16:F3"
val2="00:21:5D:16:F4"
val3="00:21:5D:16:F5"
val4=""
val5=""
val6=""
val7=""
val8=""
val9=""
val10=""

即使使用另一个 linux 实用程序(如 cut 、 sed 、 grep )完成处理,我们也将不胜感激。

4

3 回答 3

1

这个 awk 脚本应该是你要找的

awk -F[' '=] 'BEGIN{t=1} { for (i=2;i<=11;i++) {print "val" t "=\"" $i "\""; t+=1}}' test

有输出

system1:/depot/scripts/sh # awk -F[' '=] 'BEGIN{t=1} { for (i=2;i<=11;i++) {print "val" t "=\"" $i "\""; t+=1}}' test
val1="00:21:5D:16:F3"
val2="00:21:5D:16:F4"
val3="00:21:5D:16:F5"
val4=""
val5=""
val6=""
val7=""
val8=""
val9=""
val10=""
system:/depot/scripts/sh #

测试文件包含:

system:/depot/scripts/sh # cat test
val=00:21:5D:16:F3 00:21:5D:16:F4 00:21:5D:16:F5
system:/depot/scripts/sh #
于 2015-04-13T12:10:20.743 回答
0

感谢您的帮助,我想与您分享我找到的最佳解决方案

while [ "$((i++))" != "10" ]; do
   val$i=`echo $val | awk -F' ' '{print $'"$i"'}'`
   echo "val$i=$val$i"
done
于 2015-04-13T15:55:27.197 回答
0

我知道不是你真正问的,但是使用数组来解决这个问题呢?

喜欢:

val=(00:21:5D:16:F3 00:21:5D:16:F4 00:21:5D:16:F5)

$ 回声 ${val[0]}

00:21:5D:16:F3

$ 回声 ${val[1]}

00:21:5D:16:F4

$ 回声 ${val[2]}

00:21:5D:16:F5

$ 回声 ${val[3]}

于 2015-04-13T20:14:22.510 回答