如何在bash中连接每行2个变量



我有两个变量,NUMSTITLES

NUMS包含字符串

1
2
3

TITLES包含字符串

A
B
C

如何获得如下输出:

1 A
2 B
3 C
paste -d' ' <(echo "$NUMS") <(echo "$TITLES")

变量中有多行字符串表明您可能做错了什么。但是你可以试试

paste -d ' ' <(echo "$nums") - <<<"$titles"

paste的基本语法是读取两个或多个文件名;您可以使用命令替换来替换任何位置的文件,并且您可以使用here字符串或其他重定向来接收";文件";在标准输入上(其中文件名然后传统地用伪文件-代替(。

paste中默认的列分隔符是一个制表符;您可以使用-d选项将其替换为空格或其他字符。

您应该避免您的私有变量使用大写;另请参阅正确的Bash和shell脚本可变大小写

Bash变量甚至可以包含很长的字符串,但与直接从文件或管道读取相比,这通常是笨拙和低效的。

将它们转换为数组,如下所示:

NUMS=($NUMS)
TITLES=($TITLES)

然后循环遍历任何数组的索引,比如说NUMS,如下所示:

for i in ${!NUMS[*]}; {
# and echo desired output
echo "${NUMS[$i]} ${TITLES[$i]}"
}

Awk替代方案:

awk 'FNR==NR { map[FNR]=$0;next } { print map[FNR]" "$0} ' <(echo "$NUMS") <(echo "$TITLE")

对于第一个文件/变量(NR==FNR(,设置一个名为map的数组,将文件号记录作为索引,将行作为值。然后,对于第二个文件,打印数组中的条目以及用空格分隔的行。

相关内容

  • 没有找到相关文章

最新更新