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;iawk
方式:
$ 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;iawk
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]
for12345
并使用for((j=0;j<${{a1[0]};j++)访问单个字符,并回显“${a1[0]}:${a1[0]:$j:1}”的位置;完成了
。这就可以了。但是如果我想分别使用1,2,3,4,5和1234,我不知道1234
从何而来。你可以访问a1[0]
for12345
,并访问带有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,依此类推。。