Imprimindo a saída de várias linhas em uma única coluna

0

Eu tenho o seguinte script em funcionamento:

#!/bin/bash
IFS=$(echo -en "\n\b")

echo -e "----------------------------------------------------------------------------------------------"
echo -e "| Job  Name                      | Enabled | Client Names    | Retention | Schedule    | Type |"
echo -e "----------------------------------------------------------------------------------------------"

vcenter_name=$(cat /usr/local/vdr/etc/vcenterinfo.cfg | grep vcenter-hostname | cut -d '=' -f 2)
# To extract job names:
job_name=$(mccli group show --recursive=true | grep -i "/$vcenter_name/VirtualMachines" | awk -F/. '{print $(NF-2)}')

for i in $job_name
do
enabled=$(mccli group show --name=/$vcenter_name/VirtualMachines/$i | grep Enabled | awk '{print $NF}')
client_name=$(mccli group show-members --name=/vcenter-prod.happycow.local/VirtualMachines/$i | awk '{print $3}' | tail -n +4 | awk -F/ '{print $NF}')
printf "| %-27s | %7s | %7s | %10s | %7s | %12s |\n" "$i" "$enabled" "$client_name"
done

O script é ótimo, mas precisa de alguma formatação. A saída que recebo agora é:

----------------------------------------------------------------------------------------------
| Job  Name                      | Enabled | Client Names    | Retention | Schedule    | Type |
----------------------------------------------------------------------------------------------
| Backup With Space              |    true |   Space |            |         |              |
| Disk-Level                     |    true |         |            |         |              |
| Linux-VM                       |    true |         |            |         |              |
| Partial                        |    true |         |            |         |              |
| Prod-Backup                    |   false | VM-B
VM-D |            |         |              |
| Same-Host                      |    true |         |            |         |              |
| Temp                           |    true | esxi02
ESXi-6.5
ESXi6GA |            |         |              |

Eu gostaria de ver isso como:

----------------------------------------------------------------------------------------------
| Job  Name                      | Enabled | Client Names    | Retention | Schedule    | Type |
----------------------------------------------------------------------------------------------
| Backup With Space              |    true |   Space |            |         |              |
| Disk-Level                     |    true |         |            |         |              |
| Linux-VM                       |    true |         |            |         |              |
| Partial                        |    true |         |            |         |              |
| Prod-Backup                    |   false | VM-B    |            |         |              |
|                                            VM-D    |            |         |              |
| Same-Host                      |    true |         |            |         |              |
| Temp                           |    true | esxi02
|                                            ESXi6.5
|                                            ESXi6GA |            |         |              |

Ignore o alinhamento | . Eu posso cuidar disso. Então, basicamente, eu gostaria de ter a saída de vários valores / várias linhas da variável job_name em uma única coluna.

    
por suhas savkoor 01.08.2017 / 23:04

1 resposta

1

Uma abordagem é a seguinte, onde fazemos uso de nroff e tbl . Primeiro geramos o código para o pré-processador tbl com base nos dados.

Como não tenho acesso aos seus utilitários, modelei o comportamento do seu programa a seguir, que você deve incorporar no seu caso:

#!/bin/bash

 NL=$'\n'
TAB=$'\t'

header=( "Job  Name" "Enabled" "Client Names" "Retention" "Schedule" "Type" )

job_name=( "Backup With Space" "Disk-Level" "Linux-VM" "Partial" "Prod-Backup"   "Same-Host" "Temp"                             )
 enabled=(  true                true         true       true      false           true        true                              )
  client=(  Space               ""           ""         ""        "VM_B${NL}VM_D" ""          "esxio2${NL}ESXi-6.5${NL}ESXi6GA" )   

{
echo .TS
echo allbox,center,tab\($'\t'\)\;
echo l r l l l l l.
echo "$(IFS=$'\t'; echo "${header[*]}")"
for (( i=0; i<${#enabled[@]}; i++ ))
do
var=${client[$i]//$NL/$NL$TAB$TAB}
printf '%s\t%s\t%s\t\t\t\n' "${job_name[$i]}" "${enabled[$i]}" "${var}"
done
echo .TE
} | tbl - | nroff -Tascii -ms | grep '.'

Resultados:

+------------------+---------+--------------+-----------+----------+------+
|Job  Name         | Enabled | Client Names | Retention | Schedule | Type |
+------------------+---------+--------------+-----------+----------+------+
|Backup With Space |    true | Space        |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|Disk-Level        |    true |              |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|Linux-VM          |    true |              |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|Partial           |    true |              |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|Prod-Backup       |   false | VM_B         |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|                  |         | VM_D         |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|Same-Host         |    true |              |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|Temp              |    true | esxio2       |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|                  |         | ESXi-6.5     |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
|                  |         | ESXi6GA      |           |          |      |
+------------------+---------+--------------+-----------+----------+------+
    
por 02.08.2017 / 08:25

Tags