Ajuda com o alinhamento da coluna direita.

0

Eu tenho este script escrito.

#!/bin/bash

clear

echo -e "---------------------------------------------------------------------"
echo -e "| Client Name      | No. of Backups | Size    | Is Partial | Type    |"
echo -e "---------------------------------------------------------------------"

vcenter_name=$(cat /usr/local/vdr/etc/vcenterinfo.cfg | grep vcenter-hostname | cut -d '=' -f 2)
client_list=$(avmgr getl --path=/$vcenter_name/VirtualMachines | awk '{print $2}' | tail -n+2)
base=1073741824

        for i in $client_list
        do

                number_of_backup=$(avmgr getb --path=/$vcenter_name/VirtualMachines/$i | tail -n+2 | wc -l)
                size=$(avmgr getb --path=/$vcenter_name/VirtualMachines/$i --format=xml | sed 's/ /\n/g' | grep totalbytes | head -n 1 | cut -d '=' -f 2 | tr -d '"' | cut -d '.' -f 1)
                sizeInGB=$((size/base))GB
                partial=$(avmgr getb --path=/$vcenter_name/VirtualMachines/$i --format=xml | sed 's/ /\n/g' | grep partial | cut -d '=' -f 2 | tr -d '"' | head -n 1)
                if [ "$partial" == 0 ]
                then
                    type="NO"
                else
                    type="YES"
                fi
                pid=$(avmgr getb --path=/$vcenter_name/VirtualMachines/$i --format=xml | sed 's/ /\n/g' | grep pidnum | cut -d '=' -f 2 | tr -d '"' | head -n 1)
                if [ "$pid" == 3016 ] 
                then
                    pidType="Windows"
                else
                    pidType="Linux"
                fi
                printf "|  $(echo $i | cut -d '_' -f 1)           |       $number_of_backup        | $sizeInGB     | $type         | $pidType |\n"
        done

O script é ótimo. Mas a saída é bastante distorcida:

---------------------------------------------------------------------
| Client Name      | No. of Backups | Size    | Is Partial | Type    |
---------------------------------------------------------------------
|  Test-Machine                |       1        | 2GB     | NO         | Linux |
|  VM-A                |       3        | 1GB     | NO         | Windows |
|  VM-B                |       3        | 1GB     | NO         | Windows |
|  VM-C                |       3        | 1GB     | NO         | Windows |
|  VM-D                |       3        | 0GB     | NO         | Windows |

A principal preocupação é a primeira coluna, Client Name . Os nomes têm comprimento variável. Poderíamos dimensionar automaticamente a coluna 1 apenas dependendo do nome do cliente. Um máximo de 20 caracteres seria o nome do cliente nesta coluna.

Muito obrigado.

Suhas

    
por suhas savkoor 06.07.2017 / 20:07

1 resposta

1

Use printf :

printf '%-20s|\n' 'abc' 'abcdefghijklmnop'

Saída:

abc                 |
abcdefghijklmnop    |

No seu caso:

    printf "| %-20s | %14s | %4s | %10s | %7s |\n" \
       "$(echo $i | cut -d '_' -f 1)" "$number_of_backup" "$sizeInGB" "$type" "$pidType"
    
por 06.07.2017 / 20:18