Проверить сложно, так как вы указали возможные совпадения только за один год, но
awk 'NR==FNR{c[$1$2]=$4; next} ($1$2 in c) {$3 = sprintf("%03d", $3 + c[$1$2])} {print $1, $3, $4, $5}' file2 file1
1980 001 0100 3.3
1982 11 0400 2.2
1985 04 0700 1.7
1995 31 1000 2.2
Вот практический эксперимент, который делает именно то, о чем вы спрашивали; он запускает bash
, устанавливает переменную среды, затем запускает tcsh
и меняет ее значение. Затем он проверяет значение в bash
.
#!/bin/bash
export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"
tcsh -c 'echo $SPORT; setenv SPORT archery; echo $SPORT'
printf 'SPORT is "%s"\n' "$SPORT"
Выполнение этого сценария bash
, который вызывает tcsh
, приведет к
SPORT is "baseball"
baseball
archery
SPORT is "baseball"
Но нам даже не нужно переключаться на tcsh
, чтобы увидеть это в действия, достаточно ввести подоболочку, которая имеет отдельную среду, с (...)
в нашем сценарии bash
:
#!/bin/bash
export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"
(
echo "$SPORT"
export SPORT=archery
echo "$SPORT"
)
printf 'SPORT is "%s"\n' "$SPORT"
Вывод останется прежним.
Одна среда не может влиять на другую за одним исключением: новая среда наследует переменные среды от родительской среды. Подоболочка (как в последнем примере) также наследует неэкспортированные переменные оболочки.
Переменные среды означают не это. «Окружающая среда» специфична для процесса. Он может (или не может )быть унаследован другими процессами, ответвленными от этого процесса, в зависимости от различных факторов. Изменение среды запущенного процесса никогда не повлияет на другие запущенные процессы.*
Прочтите, что означают переменные окружения, в спецификациях POSIX . (И поймите, что этот документ предназначен для разработчиков , а не для пользователей.)
*или, по крайней мере, для того, чтобы придумать исключение, потребуются очень хорошие навыки кодирования на низком -уровне. Я не знаю, возможно ли это в C; возможно с общей памятью. Но этого бы не произошло, если бы они не были специально спроектированы таким образом.