拆分unix变量并将其提供给循环

问题描述 投票:0回答:4

让我们说我有低于价值

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
bash shell unix
4个回答
1
投票

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

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

1
投票

如果你的起始变量是var1var2

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

要么

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

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


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值之后。只需将12在粘贴线中切换,就像paste <(<<<$var2 tr ' ' '\n') <(<<<$var1 tr ' ' '\n')一样,它们将被切换。

tutorialspoint提供实时版本。


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
© www.soinside.com 2019 - 2024. All rights reserved.