Я попробовал вашу команду, и мне кажется, что она работает, просто найдите.
sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'
Я использовал команду source вместо.
С ~/.bashrc
, содержащим:
[ws] root ~ >cat /home/user1/.bashrc
#.bashrc
...
export TESTENV="test"
...
выполните вашу команду и отобразите содержимое/tmp/user.env
:
[ws] root ~ >sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'
[ws] root ~ >cat /tmp/user.env
...
SHELL=/bin/bash
USER=user1
SUDO_COMMAND=/bin/bash -c sh -c source\ ~/.bashrc\ &&\ printenv\ >\
...
TESTENV=test
...
[ws] root ~ >
Вы можете использовать awk
для этой цели:
awk 'NR==FNR {missing[$1]=$2} NR>FNR {printf("%s %s\n",$1,missing[$1]);}' file2.txt file1.txt > file3.txt
Это обработает сначала file2.txt
, а затем file1.txt
.
При обработке file2.txt
(, обозначенной FNR
, номер -строки файла -, равный NR
, глобальный номер обработанной строки -), мы читаем «год -пропущенные дни" -объединение в массив missing
.
При обработке file1.txt
мы печатаем год и количество пропущенных дней, найденные в массивеmissing
(или пустую строку, если она отсутствует ).
Вывод будет передан в файл file3.txt
.
Думаю, вы могли бы использовать awk
для сбора данных из второго файла и хеширования значений из первого файла
awk 'FNR == NR { map[$1] = $2; next } ($1 in map) { $2 = map[$1] }1' file2 file1