Несмотря на то, что использование временного файла является правильным, мне это не нравится, потому что:
вы должны быть уверены, что не удалили другой временный файл (да, вы можете использовать mktemp - это довольно полезный инструмент)
Вы должны позаботиться об его удалении (или перемещении, как сказал Титон), ВКЛЮЧАЯ, когда ваш скрипт завершается сбоем или останавливается до конца (поэтому удаление временных файлов в конце скрипта не так уж и разумно) *
это генерирует IO на диске (хорошо, не так много, но мы можем сделать это легче)
Так что мой способ избежать временного файла прост:
my_output="$(awk '(PROGRAM)' source_file)"
echo "$my_output" > source_file
Обратите внимание на использование двойных кавычек либо при получении вывода из команды awk, И при использовании echo (если вы этого не сделаете, у вас не будет символов новой строки).