Em awk
o BEGIN block / rule está sendo executado antes que o primeiro registro de entrada seja lido e somente uma vez , para que o script e o awk funcionem é necessário removê-lo, pois awk
executará esse bloco para cada entrada / leituras de registros.
Eu pessoalmente também uso a condição Ternary quando eu tenho apenas uma instrução action / else.
awk '{ print (NR==lineNum)?val:$0 }'