Script para combinar dados de um arquivo para outro [fechado]

1

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 é:

  1. iterar no primeiro arquivo para criar uma matriz de nome / valor
  2. iterar pelo segundo arquivo e montar cada linha com o valor correto da matriz

Pergunta: existe alguma ferramenta CLI padrão para isso?

    
por Bertrand SCHITS 10.03.2016 / 01:50

2 respostas

4

Com o awk é fácil:

awk -F ":" 'FNR==NR{a[$1]=$2;next} $1 in a { print a[$1]$2}' homedir.txt file.txt
    
por 11.03.2016 / 15:57
3

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.

    
por 10.03.2016 / 07:28

Tags