让我们说我有低于价值
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
将vars转换为数组并循环遍历数组:
a1=( $var1 )
b1=( $var2 )
for ((i=0;i<${#b1[@]}; i++)); do
echo "${b1[i]} ${a1[i]}"
done
如果你的起始变量是var1
和var2
:
read var3 foo var4 bar <<< "${var1} ${var2}"
要么
var3=${var1% *}; var4=${var2% *}
请分享echo $var3 $var4
的输出。
用换行符替换空格分隔列表并使用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提供实时版本。
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