O seguinte programa gawk
deve funcionar para você:
echo -e "unixtime;host_name;ip_adress;description;2;0;1\n1234567890;hName;hIP;hDesc;2;1;0" |
gawk -F";" 'BEGIN {OFS=";"} {
if (NR<2) next;
$1=strftime("%Y-%m-%d %H:%M:%S", $1);
$5=($5==2?"CRITICAL":$5);
$6=($6?"Yes":"No") ; $7=($7?"Yes":"No") ;
print}'
2009-02-14 00:31:30;hName;hIP;hDesc;CRITICAL;Yes;No
O principal aqui é que você pode colocar vários comandos em uma chamada awk
.
$6=($6?"Yes":"No")
ou, mais formalmente (condition?consequence:alternative)
, é chamado de operador "ternário" e é uma abreviação de if (condition) consequence else alternative
Se você quiser imprimir a linha de cabeçalho inalterada , não "ignorá-la", você pode escrever if (NR<2) {print;next} ;
Editar: Sugestão de melhoria de desempenho implementada do @cas para mover a atribuição de OFS para um bloco BEGIN.