【问题标题】:extract string from another using awk使用 awk 从另一个中提取字符串
【发布时间】:2015-04-13 10:28:20
【问题描述】:

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

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 )完成处理,我们也感谢任何帮助。

【问题讨论】:

  • oyu 是否一定要使用 awk 或其他解决方案?

标签: shell ash


【解决方案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 #

【讨论】:

  • 我们可以使用另一个 linux 实用程序,如 cut 、 sed 、 grep 来避免这种长时间的处理
  • 我不懂你们的cmets。可以一行一行,为什么还要另外三个命令呢?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    喜欢:

    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-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2018-12-05
      相关资源
      最近更新 更多