Bash脚本"连接"多线程变量

时间:2015-02-17 16:45:57

标签: bash shell awk echo

在bash脚本中,我有三个包含多行相等长度的变量。

例如:

$a 
one
two
three

$b
dog
cow
fish

$c
blue
red
green

我可以用什么方式将输出回显为类似的格式:

onedogblue
twocowred
threefishgreen

我尝试了循环遍历每个变量并回显每一行的for循环,但没有得到所需的结果。有什么建议吗?

编辑更准确 所以我的脚本将以文本文件作为参数运行(./script.sh textfile)我有三个变量与此变量具有相似的内容:

#!/bin/sh
x=`awk 'NR>1{print $1}' $1 | tr '[:upper:]' '[:lower:]'`

我正在从命令参数中操作相同的文本文件以获取文件的不同部分。最终想要"粘贴"他们一起用这种格式" $ x" :" $ y"" $ z。我知道可能有更合理的方法将文本文件处理成所需的格式,但我想找到是否有这样的方式以上面列出的方式格式化它。

2 个答案:

答案 0 :(得分:7)

paste是你的朋友:

$ paste -d' ' <(echo "$a") <(echo "$b") <(echo "$c")
one dog blue
two cow red
three fish green

注意$a已通过a=$(cat a),文件a包含您提供的行。这同样适用于$b$c。此外,重要的是要看到我正在做echo "$a",并在变量周围加上引号,以便保留格式。否则,新线将不会出现。

paste不允许-d''(即空分隔符),因此如果您要删除可以管道的空格,例如tr

$ paste -d' ' <(echo "$a") <(echo "$b") <(echo "$c") | tr -d ' '
onedogblue
twocowred
threefishgreen

答案 1 :(得分:0)

如何在回显中没有引号,以便删除换行符,然后使用sed删除空格。

$a="one
> two
> three"
$
$echo "$a"
one
two
three
$
$echo $a
one two three
$
$echo $a | sed 's/ //g'
onetwothree
$