BASH - 将多个命令输出到列中

Kev*_*hke 3 linux bash shell multiple-columns output

我正在尝试编写一个运行各种命令的脚本,并将每个命令的结果输出到一列,但是我无法将输出显示在列中.

#!/bin/bash

# Get GBP Neighbour NAMES
NEIGHBOR=$(vtysh -c 'show ip bgp neighbors' | grep Incoming | awk '{print $7}')

# Get IPs of BGP neighbours
IP=$(vtysh -c 'show ip bgp summary' | awk '{print $1}' | head -n -2 | tail -n +6)

# Get Up/Down time
TIME=$(vtysh -c 'show ip bgp summary' | awk '{print $9}' | head -n -2 | tail -n +6)

# Get State/PfxRcd
STATE=$(vtysh -c 'show ip bgp summary' | awk '{print $10}' | head -n -2 | tail -n +6)
Run Code Online (Sandbox Code Playgroud)

如何在列中分隔输出,例如:

NEIGHBOR | IP | TIME | STATE
Run Code Online (Sandbox Code Playgroud)

提前致谢!

编辑

谢谢@RomanPerekhrest的帮助!

工作脚本:

#!/bin/bash

# Get GBP Neighbour NAMES
NEIGHBOR=$(vtysh -c 'show ip bgp neighbors' | grep "Incoming" | awk '{print $7}')
# Get IPs of BGP neighbours
IP=$(vtysh -c 'show ip bgp summary' | awk '{print $1}' | head -n -2 | tail -n +6)
# Get Up/Down time
TIME=$(vtysh -c 'show ip bgp summary' | awk '{print $9}' | head -n -2 | tail -n +6)
# Get State/PfxRcd
STATE=$(vtysh -c 'show ip bgp summary' | awk '{print $10}' | head -n -2 | tail -n +6)
# Generate Titles for table
TITLE=$(paste -d'|' <(echo "NEIGHBOR") <(echo "IP") <(echo "UPTIME") <(echo "STATE"))
# Generate table
LIST=$(paste -d'|' <(echo "$NEIGHBOR") <(echo "$IP") <(echo "$TIME") <(echo "$STATE"))
# Merge titles and table
OUTPUT=$(echo -e "$TITLE" && echo -e "$LIST")
# Display output
echo -e ""
echo -e "------------------------------------------------"
echo -e "NEIGHBORS AND STATUS"
echo -e "------------------------------------------------"
echo -e ""
echo -e " $OUTPUT" | column -s'|' -t # Echo output and colmnize it
echo -e ""
Run Code Online (Sandbox Code Playgroud)

这会生成表格并平等标注标题和内容.设置| column -s'|' -t最终回声很重要,因为如果没有,它就不能正确对齐标题​​.

Rom*_*est 6

paste命令:

paste -d'|' <(echo "$NEIGHBOR ") <(echo "$IP") <(echo "$TIME") <(echo "$STATE")
Run Code Online (Sandbox Code Playgroud)

  • @KevinMaschke,尝试通过管道传递给“ column”命令,`粘贴... | 列-s'|' -t` (2认同)