Следующая программа gawk
должна работать для вас:
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
Главное здесь то, что вы можете поместить несколько команд за один вызов awk
.
$ 6 = ($ 6? «Да»: «Нет»)
или, более формально (условие? Последствие: альтернатива)
, называется «тернарным» оператором, и это сокращение for if (условие) последствие иначе альтернатива
Если вы хотите напечатать строку заголовка без изменений , а не «пропустить ее», вы можете написать if (NR <2) {print ; next};
Edit: Реализована подсказка по повышению производительности от @cas, чтобы переместить назначение OFS в блок BEGIN.