Preencher linha vazia em uma coluna com base na correspondência entre duas outras colunas

1

Arquivo а.txt :

snp chr pos effect  noneffect   eaf beta    se  pval    pval    pval
chr:1   1   101 A   G   0.3 -0.04   0.03    0.1 0.44    0.936
chr:1   1   1000    B   L   0.01    0.03    0.8 0.427   0.6804

Algumas das linhas de а.txt podem perder valores (como a segunda linha aqui). Arquivo b.txt

101 0.1
1000 0.2

Estou procurando uma maneira de substituir de a.txt por de b.txt

Eu tentei o comando abaixo que não resolveu o problema:

awk ' {print ,} ! {print ,}' b.txt a.txt
awk 'NR==FNR{a[];next} in a{print}' b.txt a.txt

Como posso resolver isso?

    
por user6108949 05.09.2017 / 13:51

1 resposta

3

Desde que você possa usar o número de campos NF para determinar se está faltando, você pode fazer

awk 'NR==FNR {a[]=; next} NF<11 { = a[] OFS } {print}' b.txt a.txt

Se você quiser embelezar a saída, canalize-a em column -t :

$ awk 'NR==FNR {a[]=; next} NF<11 { = a[] OFS } {print}' b.txt a.txt | column -t
SNP               CHR  POS    EFFECT_ALLELE  NON_EFFECT_ALLELE  EAF       BETA        SE         PVALUE    INFO      HWE
chr:1:10177:AC:A  1    10177  A              AC                 0.376827  -0.0447626  0.0316126  0.156783  0.422784  0.936182
chr:1:10352:TA:T  1    10352  T              TA                 0.43176   0.00727013  0.0309617  0.814356  0.427932  0.680802
    
por steeldriver 05.09.2017 / 14:21