Como extrair valores de um arquivo usando padrão (s) de uma coluna em outro arquivo e inserir tais valores como uma nova coluna para o último?

1

Eu faço amostras de conjuntos "vencedores" de 60 cartões de jogo, como este e extrai o cartão nomes e contagem e formatá-lo para uso com algum software. A saída formato é:

.<ID><tab>count<tab>name

Etapa 1

Eu começo com a versão de texto do conjunto usando o link fornecido na página (ao lado imprimir ) e manter os dados (2 colunas separadas por um espaço) removendo as placas Sideboard .

Etapa 2

Para cada nome de cartão, pesquiso um arquivo list local contendo uma lista de propriedades de cartões separadas por ponto-e-vírgula e igualo o nome do cartão no segundo campo para extrair o primeiro campo que é o número de ID para o cartão correspondente (as linhas foram encurtadas aqui, pois apenas os primeiros campos são importantes):

ID;Full Name;...
0;Air Elemental;1;Air Elemental;0800h;;;;;;;
1;Ancestral Recall;1;Ancestral Recall;0800h;;;;;;;;
2;Animate Artifact;1;Animate Artifact;0800h;;;;;;;
...    
10780;Jace, the Mind Sculptor;1;Jace, the Mind Sculptor;0008h;;;;;;;;
10871;Aura Finesse;0;Aura Finesse;0008h;;;;;;;

... Eu prefixo cada linha do passo 1 com .ID , certificando-me de que as 3 colunas estão separadas por uma tabulação. O arquivo final output tem esta aparência (não estou preocupado com a parte do cabeçalho):

;MY1 - Shardless BUG - #1
;
;User
;User E-Mail
;28/08/2014
;1
;4th Edition
;

.12516  2   Baleful Strix
.12533  4   Shardless Agent
.12700  4   Deathrite Shaman
.9038   4   Tarmogoyf
.10780  2   Jace, the Mind Sculptor
.12004  2   Liliana of the Veil
.12     2   Bayou
.10747  2   Creeping Tar Pit
.12645  4   Abrupt Decay
.1547   4   Brainstorm
.2285   3   Force of Will
.1456   1   Hymn to Tourach
.13650  1   Toxic Deluge
.9286   3   Thoughtseize
.239    1   Swamp
.1486   4   Polluted Delta
.258    3   Underground Sea
.10706  4   Verdant Catacombs
.3329   2   Wasteland
.1      4   Ancestral Recall
.10612  2   Misty Rainforest
.252    2   Tropical Island

Considerando o arquivo de texto fonte acima mencionado e o arquivo list , como pode produzir o arquivo de saída com o formato necessário?

    
por jus cogens prime 30.08.2014 / 01:50

1 resposta

1

Então, o que fiz foi aparar o arquivo list nos dois primeiros valores (ID; Name), depois usei esse script no texto de origem arquivo :

#!/usr/bin/env bash

dos2unix "$1"
sed -e '/Sideboard/,$d' "$1" -e '/^$/,$d' | tee source_strip | cut -d ' ' -f 2- >temp
while IFS= read f; do
  sed -n "s/\([0-9]*\);$f$/\./p" list
done <temp >IDs
sed -ni 's/^\([0-9]*\) \([a-zA-Z]*\)/\t/p' source_strip
paste IDs source_strip > final
cat final

É claro que isso pressupõe um número de ID para cada pesquisa de nome, caso contrário, isso não funcionará corretamente. Certamente há uma maneira mais elegante de fazer isso, mas neste caso funciona!

    
por 31.08.2014 / 05:40