使用awk从另一个中提取字符串
extract string from another using awk
我有这个变量,其中包含由 space
分隔的字符串列表
val=00:21:5D:16:F3 00:21:5D:16:F4 00:21:5D:16:F5
我想提取每个字符串分隔 bu space " " 然后分配给 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)完成的,我们也将不胜感激。
这个 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 #
感谢您的帮助,我想与您分享我找到的最佳解决方案
while [ "$((i++))" != "10" ]; do
val$i=`echo $val | awk -F' ' '{print $'"$i"'}'`
echo "val$i=$val$i"
done
我知道不是你真正问的,但是用数组来解决这个问题呢?
喜欢:
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]}
我有这个变量,其中包含由 space
分隔的字符串列表val=00:21:5D:16:F3 00:21:5D:16:F4 00:21:5D:16:F5
我想提取每个字符串分隔 bu space " " 然后分配给 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)完成的,我们也将不胜感激。
这个 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 #
感谢您的帮助,我想与您分享我找到的最佳解决方案
while [ "$((i++))" != "10" ]; do
val$i=`echo $val | awk -F' ' '{print $'"$i"'}'`
echo "val$i=$val$i"
done
我知道不是你真正问的,但是用数组来解决这个问题呢?
喜欢:
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]}