Eu tenho três arquivos csv, cada um deles contendo as informações necessárias para obter um quarto. Estou descrevendo arquivos de brinquedo, mas os reais contêm muito mais colunas e linhas, ainda nos mesmos modelos.
O arquivo 1 é o arquivo de dados brutos. Uma letra é dada para cada 'rs' em 'Individual'. Por exemplo. Individual0 tem um 'A' em rs009, um 'T' em rs888, etc. :
Individual0 Individual1 Individual2 Individual3
rs009 A T A A
rs888 T T T T
rs103 C C C C
rs591 A A A A
rs112 A A A A
rs004 C C C C
O arquivo 2 agrupa as variáveis 'rs' em 'Grupos'. Cada um desses "Grupos" é uma combinação de variáveis 'rs' sucessivas, de acordo com a ordem no Arquivo 1. Por exemplo, rs009 e rs103 são agrupados em uma variável denominada "Grupo0". Não há possibilidade de ter um 'Grupo' Isso se sobreporia a outro.Quando "Group0" termina, "Group1" é iniciado, e assim por diante.É importante que algumas variáveis 'rs' sejam filtradas nesta etapa (ou seja, rs888):
Group0 rs009 rs103
Group1 rs591 rs112 rs004
O arquivo 3 é o arquivo de resultado no qual cada variável 'Grupo' recebe um número atribuído para cada "indivíduo". Por exemplo, o indivíduo2 tem um 3 no grupo 0 e um 2 no grupo 1:
Individual0 Individual1 Individual2 Individual3
Group0 1 3 3 3
Group1 3 3 2 3
O arquivo que eu gostaria de obter é semelhante ao Arquivo 1, mas no qual todas as variáveis 'rs' que não estivessem em um 'Grupo' = 3 para um determinado 'Individual' no Arquivo 3 seriam definidas como 0, enquanto os outros manteriam sua carta. Por exemplo, rs009 pertence ao Group0 (cf Arquivo 2), então o Arquivo 3 informa que o Group0 para Individual0 tem um '1', significando que a letra mencionada no Arquivo 1 deve ser alterada para 0. Ao contrário, para Individual1, O arquivo 3 informa que o Group0 tem um '3', portanto a letra no arquivo 1 deve ser mantida (ou seja, 'T'). As variáveis 'rs' que foram filtradas receberão o mesmo número que a anterior na lista (ou seja, rs888 tem a mesma atribuição 'Group' que rs009):
Individual0 Individual1 Individual2 Individual3
rs009 0 T A A
rs888 0 T T T
rs103 0 C C C
rs591 A A 0 A
rs112 A A 0 A
rs004 C C 0 C
Em outras palavras, preciso:
1) pegue o arquivo 1
2) verifique em qual 'Grupo' cada 'rs' pertence ao Arquivo 2. Se um 'rs' não estiver no Arquivo2, então ele pertence ao mesmo 'Grupo' que o 'rs' anterior, de acordo com o ordem no Arquivo1.
3) obtenha o valor atribuído para cada "Grupo" em cada "Individual" no Arquivo 3
4) se o último valor for '3', então mantenha a letra (A / C / G / T) atribuída para cada "indivíduo" no Arquivo 1, caso contrário mude para '0'
Eu tentei várias opções com awk, mas meu conhecimento é bastante limitado, então eu não poderia descobrir o caminho para conseguir o que eu preciso no final. É meu primeiro post, então espero que informações suficientes sejam fornecidas.
Eu posso executar Perl scritps, mas não escrevê-lo, estou com medo.
Agradecemos antecipadamente por sua ajuda!