KSH Ler entrada do arquivo e gravar em CSV na mesma linha

0

Eu tenho a seguinte saída e quero que a saída seja:

DE:

GigabitEthernet0/0 is up, line protocol is up
     1 input errors, 0 CRC, 0 frame, 1 overrun, 0 ignored
     275 output errors, 0 collisions, 3 interface resets
GigabitEthernet0/1 is up, line protocol is up
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     42 output errors, 0 collisions, 3 interface resets

PARA: (no formato CSV)

Interface, In Errors, Out Errors
GigabitEthernet0/0, 1, 275
GigabitEthernet0/1, 0, 42

Quando eu coloco o acima em um loop for eu recebo saídas escalonadas como Im grepping no turno de cada loop

Heres meu script

for line in $(cat $DATAFILE/$rname.intfs)
do
     intf=$(echo $line | grep "line protocol is " | awk '{print $1}')
     inerrs=$(echo $line | grep "input error" | sed 's/^[ \t]*//;s/[ \t]*$//' | awk '{print $1}')
     outerrs=$(echo $line | grep "output error" | sed 's/^[ \t]*//;s/[ \t]*$//' | awk '{print $1}')
     echo "$intf,$inerrs,$outerrs" >intf.csv
done

Qualquer ajuda é apreciada

obrigado

Jay

    
por jay 15.02.2018 / 12:05

1 resposta

0

Solução de

Awk (sem loops de conchas e correntes de dutos):

awk 'BEGIN{ OFS=", "; print "Interface, In Errors, Out Errors" }
     /line protocol /{ ifc=$1 }
     /input errors/{ in_err=$1 }
     /output errors/{ print ifc, in_err, $1 }' "$DATAFILE/$rname.intfs"

A saída:

Interface, In Errors, Out Errors
GigabitEthernet0/0, 1, 275
GigabitEthernet0/1, 0, 42
    
por 15.02.2018 / 12:22