Вы не можете использовать awk, читать и писать из одного и того же файла (это часть вашей проблемы).
Я предпочитаю переименовывать файл перед перезаписью (но вы можете сохранить в tmp, а затемтоже переименуйте).
/bin/mv file file.tmp
awk '.... code ...' file.tmp > file
Если ваш env-файл становится больше, вы увидите, что он усекается при размере буфера вашей ОС.
Кроме того, не забывайте, чтоУ gawk (стандартное для большинства установок Linux) есть встроенный массив ENVIRON.Вы можете создать то, что вы хотите из этого
awk 'END {
for (key in ENVIRON) {
print key "=" ENVIRON[key]
}
}' /dev/null
Конечно, вы получаете все в вашей среде, так что, возможно, больше, чем вы хотите.Но, возможно, лучше начать с того, что вы пытаетесь достичь.
Редактировать В частности
awk -F"=" '{
if ($1 in ENVIRON) {
printf("%s=%s\n", $1, ENVIRON[$1])
}
# else line not printed or add code to meet your situation
}' file > file.tmp
/bin/mv file.tmp file
Редактировать 2 Я думаю, что вашЗначения var = могут иметь значение export
, чтобы они были видны массиву awk ENVIRON.
AND
echo PATH=xxx| awk -F= '{print ENVIRON[$1]}'
печатает существующее значение PATH.
Надеюсь, это поможет.
PS, поскольку вы, кажется, являетесь новым пользователем, если вы получите ответ, который поможет вам, пожалуйста, помните, чтобы пометить его как принятый и / или дать ему + (или -) какполезный ответ.