Bash 拆分unix变量并在循环中提供它

Bash 拆分unix变量并在循环中提供它,bash,shell,unix,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 我要用这个值做的是-我将把变量3=15,16,17,18和变量4=12345写入一个文件。下一行也是如此 我试过双环 for I in $var1 do for j in $var2 do echo $I,

假设我有以下值

Variable 1 = 12345 45677

Variable 2 = 15,16,17,18 11,10,09,08
我想要另一个变量,我可以提供给另一个循环,如下所示

15,16,17,18 12345

11,10,09,08 45677
我要用这个值做的是-我将把变量3=15,16,17,18和变量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

假设起始变量是
var1
var2

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

如果起始变量是
var1
var2
,请共享
echo$var3$var4
的输出:

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

请共享echo$var3$var4的输出

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

var1="12345 45677"
var2="15,16,17,18 11,10,09,08"
paste <(<<<$var1 tr ' ' '\n') <(<<<$var2 tr ' ' '\n')
如果需要,可以使用
paste-d'
选项按空格分隔列表

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

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

paste用换行符替代空格分隔的列表,并使用
paste
将它们连接起来:

var1="12345 45677"
var2="15,16,17,18 11,10,09,08"
paste <(<<<$var1 tr ' ' '\n') <(<<<$var2 tr ' ' '\n')
如果需要,可以使用
paste-d'
选项按空格分隔列表

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

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

paste将变量转换为数组并在数组中循环:

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

对于((i=0;i将变量转换为数组并在数组中循环):

a1=( $var1 )
b1=( $var2 )
for ((i=0;i<${#b1[@]}; i++)); do
   echo "${b1[i]} ${a1[i]}"
done
a1=($var1)
b1=(2美元)
对于((i=0;i
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
$var1=“12345 45678 78912”
$var2=“15,16,17,1811,10,09,08 25,24,23,22”
$awk'{for(i=1;i
awk
way:

$ 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
$var1=“12345 45678 78912”
$var2=“15,16,17,1811,10,09,08 25,24,23,22”


$awk'{(i=1;等待响应。我尝试使用如下粘贴教程点,效果很好。但不在我的脚本中工作不
$va2
vut
$var2
。在
while
之前添加一个
。在
完成之前添加一个
。即使在添加了
while之前和
之前,也会产生相同的错误或感谢您的回复。我尝试使用如下粘贴教程点效果很好。但不在我的脚本中工作不
$va2
vut
$var2
。在
while
之前添加一个
。在
完成之前添加一个
。即使在添加了
之前,while和;之前,也会产生相同的错误is按原样工作。但是如果我想分别使用1,2,3,4,5和1234,我不知道
1234
从何而来。您可以访问
a1[0]
for
12345
并使用
for((j=0;j<${{a1[0]};j++)访问单个字符,并回显“${a1[0]}:${a1[0]:$j:1}”的位置;完成了
。这就可以了。但是如果我想分别使用1,2,3,4,5和1234,我不知道
1234
从何而来。你可以访问
a1[0]
for
12345
,并访问带有
for((j=0;j<${a1[0]};j++)的单个字符,执行echo“{a1[0]}的$j位置:${a1[0]:${a1[0]:$j:1}”;完成
。第二个有效-我已将echo$var3 echo$var4输出1234 32420 1,2,3,4,5 50,51,52放入循环中,因为变量中可能有更多记录。我在第一个示例中遗漏了一个空格,现在已修复。您试图解析的信息的原始来源是什么?我几乎可以保证有更多的ef有效方式。原始源为var1,将有1234 5678 9877(仅数字)var2将有15,16,17,18 11,12,13,14 8,5,6,7(3个值用空格分隔)现在我将在一个循环中运行它,当我说第一次它应该选择var1=1234 var2=15,16,17,18,第二次var1=5678 var2=11,12,13,14等等。第二个循环有效-我已经将echo$var3 echo$var4输出1234 32420 1,2,3,4,5 50,51,52放入循环中,因为我可能在变量中有更多的记录我在第一个示例,现已修复。您试图解析的信息的原始来源是什么?我几乎可以保证有一种更有效的方法。原始来源是var1将有1234 5678 9877(仅数字)var2将有15,16,17,18 11,12,13,14 8,5,6,7(3个值以空格分隔)现在,我将在一个循环中运行它,当我说第一次它应该选择var1=1234 var2=15,16,17,18,第二次var1=5678 var2=11,12,13,14等等..您在下面提到您想要读取多个“记录”存储在
var1
var2
中;这些记录的来源是什么?原始来源是var1将有1234 5678 9877(仅数字)var2将有15,16,17,18 11,12,13,14 8,5,6,7(3个值用空格分隔)现在,我将在一个循环中运行它,当我说第一次它应该选择var1=1234 var2=15,16,17,18,第二次var1=5678 var2=11,12,13,14等等..您在下面提到您想要读取多个“记录”存储在
var1
var2
中;这些记录的来源是什么?原始来源是var1将有1234 5678 9877(仅数字)var2将有15,16,17,18 11,12,13,14 8,5,6,7(3个值用空格分隔)现在我将在一个循环中运行它,当我说第一次时,它应该选择var1=1234 var2=15,16,17,18,第二次var1=5678 var2=11,12,13,14,依此类推。。