Извлечь строку из другого используя awk

У меня есть эта переменная, которая содержит список строк, разделенных пробелом

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

Я хочу извлечь каждую строку, разделенную бу пробел " ", а затем назначить его valЯ использую этот шелл-код, но он не работает

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.

3 ответа

Решение

Спасибо за вашу помощь, и я хочу поделиться с вами лучшим решением, которое я нашел

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

Этот 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 #

Я знаю, это не то, что вы действительно спросили, а как насчет использования массива для решения этой проблемы?

лайк:

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

$ echo $ {val [0]}

00:21:5D:16:F3

$ echo $ {val [1]}

00:21:5D:16:F4

$ echo $ {val [2]}

00:21:5D:16:F5

$ echo $ {val [3]}

Другие вопросы по тегам