在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。我知道可能有更合理的方法将文本文件处理成所需的格式,但我想找到是否有这样的方式以上面列出的方式格式化它。
答案 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
$