Sua localidade está atrapalhando. Consulte o link
Para o GNU awk, você precisa definir a variável de ambiente POSIXLY_CORRECT
e sua variável de ambiente LS_NUMERIC para uma localidade que use vírgula como separador decimal:
POSIXLY_CORRECT=1 LC_ALL=en_DK.utf-8 gawk -F';' '$1+0 > 0 {print $1 FS $2-$3 FS}' file
1;0,2;
4;-0,5;
2;2,55;
Eu uso $1+0 > 0
para evitar a impressão do cabeçalho também. Você também pode usar NR > 1 && $1 > 0
Você também pode usar gawk --posix
ou gawk --use-lc-numeric
em vez do POSIXLY_CORRECT env var.