Com o awk é fácil:
awk -F ":" 'FNR==NR{a[$1]=$2;next} $1 in a { print a[$1]$2}' homedir.txt file.txt
Eu tenho um arquivo contendo os pares nome / valor das pastas:
peter:/home/peter/
max:/home/max-lucas/
judith:/home/judith/documents/
Eu tenho outro arquivo contendo pares nome / valor dos arquivos, com os mesmos nomes:
max:todo.txt
peter:calendar.txt
peter:notes.txt
peter:dummy.txt
Este é um tipo de banco de dados.
Os arquivos reais não são tão simples. Eu tenho que extrair os dados com sed, mas este não é o ponto.
Eu quero concatenar os dois arquivos:
/home/peter/calendar.txt
/home/peter/notes.txt
/home/peter/dummy.txt
/home/max-lucas/todo.txt
A única ideia que tenho é:
Pergunta: existe alguma ferramenta CLI padrão para isso?
Não consegui encontrar uma ferramenta cli para isso, mas talvez encontre uma maneira de percorrer seus arquivos para recuperar a saída desejada. Primeiro, precisamos criar um par de valores de chave de usuários e seus diretórios.
declare -A users
for i in $(cat file1);do users+=( [$(echo $i | awk -F ':' '{print $1}')]=$(echo $i | awk -F ':' '{print $2}')) ; done
Agora, criamos um par de valores-chave. Você pode verificar isso exibindo o conteúdo do dicionário
for i in "${!users[@]}"; do echo "$i - ${users["$i"]}"; done
Agora vamos iterar pelo segundo arquivo e no comando print substituiremos o usuário por seu diretório.
for i in $(cat file2);do echo ${users[$(echo $i|awk -F ':' '{print $1}')]}$(echo $i|awk -F ':' '{print $2}') ; done
isso me mostrou o exemplo de saída que você nos mostrou.