Заполните пустую строку в столбце на основе соответствия между двумя другими столбцами

Файл а.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

Некоторые строки от а.txt мог бы отсутствовать $6 значения (как вторая строка здесь). Файл b.txt

101 0.1
1000 0.2

Я ищу путь, как заменить $6 из a.txt с $2 от b.txt

Я попробовал ниже команды, которая не решила проблему:

awk '$6 {print $3,$6} !$6 {print $3,$2}' b.txt a.txt
awk 'NR==FNR{a[$1];next}$3 in a{print}' b.txt a.txt

Как я могу решить его?

1
задан 26 September 2017 в 13:00

1 ответ

Если можно использовать количество полей NF, чтобы определить, отсутствует ли $6, Вы могли бы сделать

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

, Если Вы хотите украсить вывод, передать его по каналу до column -t:

$ awk 'NR==FNR {a[$1]=$2; next} NF<11 {$6 = a[$3] OFS $6} {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
2
ответ дан 7 December 2019 в 13:30

Другие вопросы по тегам:

Похожие вопросы: