首页 > 解决方案 > 并排组合两个具有多行值的变量

问题描述

从两个变量中获取两个列表并并排组合成一个变量。

假设你echo "$var1"得到这个输出:

a
b
c
d

假设你echo $var2得到这个输出:

1
2
3
4

我想要$var3这个确切的输出:

a 1
b 2
c 3
d 4

你怎么做到这一点?如果您问我为什么要这样做,当您为变量分配一个命令或多个命令时,第一个命令必须开始和结束,然后第二个命令必须开始和结束,这样varx=(command1 && command2)可以提供:

a
b
c
d
1
2
3
4

这也必须在没有文件输入或输出的情况下完成。我忘了补充,不要假设列表是静态的。事实上,假设相反,列表是动态的。也就是说,一个命令生成一个列表,另一个命令生成另一个列表。所以问题的一部分是确保输出是同步的,尤其是与像 apt 这样的脚本错误软件。它有点令人困惑,因为 apt、aptitude 和 apt-rdepends 都可以显示包和 rdepends(可能除了 aptitude)。他们都有不同的速度和级别的错误,很可能是最错误的。最好有一个测试程序速度的功能(这 3 个中哪个在显示包或 rdependencies 方面最快)。无论如何,我通过使用一个程序来获取依赖项(因此创建静态列表)和另一个程序来显示包名称和大小来解决这个问题。

正如这里所承诺的那样是脚本(第一个是这个问题的主题):

RDEPENDS 版本

ps -A &>> Distro1Analysis.txt && sudo service --status-all &>> Distro1Analysis.txt && \
for z in $(dpkg -l | awk '/^[hi]i/{print $2}' | grep -v '^lib'); do \
printf "\n$z:" && \
aptitude show $z | grep -E 'Uncompressed Size' && \
result=$(apt-rdepends 2>/dev/null $z | grep -v "Depends")
final=$(apt show 2>/dev/null $result | grep -E "Package|Installed-Size" | sed "/APT/d;s/Installed-Size: //");
if [[ (${#final} -le 700) ]]; then echo $final; else :; fi done &>> Distro1Analysis.txt

要看

ps -A &>> Distro1Analysis.txt && sudo service --status-all &>> Distro1Analysis.txt && \
for z in $(dpkg -l | awk '/^[hi]i/{print $2}' | grep -v '^lib'); do \
printf "\n$z:" && \
aptitude show $z | grep -E 'Uncompressed Size' && \
printf "\n" && \
apt show 2>/dev/null $(aptitude search '!~i?reverse-depends("^'$z'$")' -F "%p" | \
sed 's/:i386$//') | grep -E 'Package|Installed-Size' | sed '/APT/d;s/^.*Package:/\t&/;N;s/\n/ /'; done &>> Distro1Analysis.txt

这两个脚本都可以工作,但是可以更清晰地编写和优化以更快地工作。然而,这两个脚本都教。此外,尽管我修复了脚本以使其正常运行,但为了保持紧凑,我选择不按照最初的要求放入两个列表中;由于命令最初是如何吐出输出的。

标签: bash

解决方案


var3=$(paste -d " " -- <(echo "$var1") <(echo "$var2"))

-d " "分隔符设置为空格而不是制表符。


推荐阅读