Вawk
блок/правило BEGIN выполняется до того, как будет прочитана первая входная запись и только один раз , чтобы ваш скрипт и awk работали, вам нужно удалить его, так как это не требуется здесь, то awk
будет выполнять этот блок для каждого чтения ввода/записи.
Также лично я использую троичное условие, когда у меня есть только один оператор action/else.
awk '{ print (NR==lineNum)?val:$0 }'