拆分unix变量并循环提供

时间:2019-04-10 10:43:45

标签: bash shell unix

让我们说我的价值观低于

Variable 1 = 12345 45677

Variable 2 = 15,16,17,18 11,10,09,08

我想要另一个变量,可以在其中提供如下所示的另一个循环

15,16,17,18 12345

11,10,09,08 45677

我要用这个值做的是-我将把var 3 = 15,16,17,18和var 4 = 12345这样写到文件中。下一行类似。

我尝试了双循环

for I in $var1 
do 
  for j in $var2 
  do 
  echo $I, $j
done 
done

这是做什么的-

15,16,17,18 12345
15,16,17,18 45677

11,10,09,08 12345
11,10,09,08 45677

4 个答案:

答案 0 :(得分:1)

提供的起始变量为var1var2

read var3 foo var4 bar <<< "${var1} ${var2}"

OR

var3=${var1% *}; var4=${var2% *}

请共享echo $var3 $var4的输出。

答案 1 :(得分:1)

将vars转换为数组并遍历数组:

a1=( $var1 )
b1=( $var2 )
for ((i=0;i<${#b1[@]}; i++)); do
   echo "${b1[i]} ${a1[i]}"
done

答案 2 :(得分:0)

用换行符替换空格分隔的列表,并使用paste来加入它们:

var1="12345 45677"
var2="15,16,17,18 11,10,09,08"
paste <(<<<$var1 tr ' ' '\n') <(<<<$var2 tr ' ' '\n')

将输出:

12345   15,16,17,18
45677   11,10,09,08

如果需要,可以使用paste -d' '选项以空格分隔列表。

不是,您可以使用任何coreutils工具来解析它,甚至可以使用简单的bash while循环:

paste <(<<<$var1 tr ' ' '\n') <(<<<$var2 tr ' ' '\n') |
while read -r i j; do
    echo $i $j
done

@edit我注意到在您的输出var1值之后是var2值。只需在粘贴行中用1切换2,就像paste <(<<<$var2 tr ' ' '\n') <(<<<$var1 tr ' ' '\n')一样,它们就会被切换。

可通过tutorialspoint获得实时版本。

答案 3 :(得分:0)

awk方式:

$ var1="12345 45678 78912"
$ var2="15,16,17,18 11,10,09,08 25,24,23,22"

$ awk '{for(i=1;i<=NF/2;i++)print $(i+NF/2) " " $i}' <<< "$var1 $var2"
15,16,17,18 12345
11,10,09,08 45678
25,24,23,22 78912