Como definir uma linha e uma coluna no shell script

2

Acabei de fazer meu primeiro shell script com a ajuda de outros, e ele funciona como esperado, mas quero organizá-lo mais.

O script atual:

{ date '+%F %T';
    "$ipath"/cli iedge list |
       awk 'BEGIN { print "Registration ID", "Ongoing Calls"}
           /Registration ID/ { id = $3; next }
           /Ongoing Calls/ { print id,$3 }'
} >> "$ifile"

Sua saída:

- Registration ID Ongoing Calls
  - Nitin_03 30
  - Nitin_01 0

Em vez disso, quero a saída formatada da seguinte forma:

-------------------------------------
|Registration ID   |  Ongoing Calls |
-------------------------------------
| Nitin_03         |     30         |
-------------------------------------
| Nitin_01         |      0         |
------------------------------------- 

Como eu faria isso? Eu tentei o seguinte e principalmente funciona, mas quando eu adicionei outro "personagem" eu tenho um erro fatal.

ipath=/usr/local/nextone/bin
ifile=/root/Nick.csv
"$ipath"/cli igrp list | awk '
  BEGIN { print "------------------------------------";
  printf "|%-17s|%-16s|%-15s|\n","Iedge Group", "maxCallsIn"   
  "maxCallsOut"
  }
  /Iedge Group/ { id = $3; next }
  /maxCallsIn/
  /maxCallsOut/{print "------------------------------------"; printf    
   "|%-17s|%-16s|%-15s\n",id,$3 } 
   END{
   print "------------------------------------";
   }'

Eu comecei a receber esse erro quando adicionei maxCallsOut :

awk: cmd. line:3: fatal: not enough arguments to satisfy format string
        '|%-17s|%-16s|%-15s|
'
                         ^ ran out for this one
    
por Nitin Kapoor 03.06.2015 / 01:31

1 resposta

1

Para obter a saída formatada do awk, use printf :

$ "$ipath"/cli iedge list | awk 'BEGIN { print "------------------------------------"; printf "|%-17s|%-16s|\n","Registration ID", "Ongoing Calls"} /Registration ID/ { id = $3; next } /Ongoing Calls/ {print "------------------------------------"; printf "|%-17s|%-16s|\n",id,$3 } END{print "------------------------------------";}'
------------------------------------
|Registration ID  |Ongoing Calls   |
------------------------------------
|Nitin_03         |30              |
------------------------------------
|Nitin_01         |0               |
------------------------------------

Se for mais fácil de ler, o seguinte é o mesmo, mas espalhado por várias linhas em um script:

#!/bin/sh
"$ipath"/cli iedge list | awk '
BEGIN { print "------------------------------------";
        printf "|%-17s|%-16s|\n","Registration ID", "Ongoing Calls"
      }
/Registration ID/ { id = $3; next }
/Ongoing Calls/ {print "------------------------------------"; printf "|%-17s|%-16s|\n",id,$3 }
END{
    print "------------------------------------";
   }
'

As declarações printf podem ser ajustadas para obter o formato que você preferir.

    
por 03.06.2015 / 01:48