swa*_*wam 3 bash shell awk echo
在bash脚本中,我有三个包含多行相等长度的变量.
例如:
$a
one
two
three
$b
dog
cow
fish
$c
blue
red
green
Run Code Online (Sandbox Code Playgroud)
我以什么方式将输出回显为类似的格式:
onedogblue
twocowred
threefishgreen
Run Code Online (Sandbox Code Playgroud)
我尝试了循环遍历每个变量并回显每一行的for循环,但没有得到所需的结果.有什么建议?
编辑更准确 所以我的脚本将以文本文件作为参数运行(./script.sh textfile)我有三个变量与此变量具有相似的内容:
#!/bin/sh
x=`awk 'NR>1{print $1}' $1 | tr '[:upper:]' '[:lower:]'`
Run Code Online (Sandbox Code Playgroud)
我正在从命令参数中操作相同的文本文件以获取文件的不同部分.最终希望以"$ x":"$ y""$ z"将它们"粘贴"在一起.我知道可能有更合理的方法将文本文件处理成所需的格式,但我想找到是否存在是这种方式以上面列出的方式格式化它.
paste 是你的朋友:
$ paste -d' ' <(echo "$a") <(echo "$b") <(echo "$c")
one dog blue
two cow red
three fish green
Run Code Online (Sandbox Code Playgroud)
注意到,$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
Run Code Online (Sandbox Code Playgroud)