Новая строка в середине вывода - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь скрестить два файла, используя их местоположение.
f1:

Location    Consequence SYMBOL  Feature gnomAD_AF   gnomAD_AFR_AF   gnomAD_AMR_AF   gnomAD_ASJ_AF   gnomAD_EAS_AF   gnomAD_FIN_AF   gnomAD_NFE_AF   gnomAD_OTH_AF   gnomAD_SAS_AF   CLIN_SIG    CADD_phred  CADD_raw    CADD_raw_rankscore  REVEL_rankscore REVEL_score clinvar_clnsig  clinvar_golden_stars
1:45330550-45330550 missense_variant    MUTYH   NM_001128425.1  2.541e-05   0   0   0   5.945e-05   0   2.818e-05   0   6.821e-05   uncertain_significance  23.7    4.061544    0.54541 0.76110 0.461   -   -
1:45331556-45331556 missense_variant,splice_region_variant  MUTYH   NM_001128425.1  0.002958    0.0007277   0.003068    0.0002038   0   0.002182    0.004831    0.003839    9.747e-05   likely_pathogenic,pathogenic    29.4    6.349794    0.87691 0.99202 0.954   5,5,5,5,5,5,5   2,0,2,2,0,0,0

f2:

chromosome  start   stop    ref alt
12  132668439   132668439   G   A
17  7673593 7673593 G   C

Мне удалось сделать это, используя:

awk -v OFS="\t" 'NR==1{h1=$0}NR==FNR{arr[$1":"$2"-"$3] = $0; next}FNR==1{print h1, $0}NR>FNR{if($1 in arr){print arr[$1], $0}}' f2 f1 > res

Однако у меня есть новая строка в середине каждой строки сразу после печати h1 или arr [$ 1], и я не понимаю, почему.

chromosome  start   stop    ref alt
    Location    Consequence SYMBOL  Feature gnomAD_AF   gnomAD_AFR_AF   gnomAD_AMR_AF   gnomAD_ASJ_AF   gnomAD_EAS_AF   gnomAD_FIN_AF   gnomAD_NFE_AF   gnomAD_OTH_AF   gnomAD_SAS_AF   CLIN_SIG    CADD_phred  CADD_raw    CADD_raw_rankscore  REVEL_rankscore REVEL_score clinvar_clnsig  clinvar_golden_stars
1   45330550    45330550    C   T
    1:45330550-45330550 missense_variant    MUTYH   NM_001128425.1  2.541e-05   0   0   0   5.945e-05   0   2.818e-05   0   6.821e-05   uncertain_significance  23.7    4.061544    0.54541 0.76110 0.461   -   -
1   45331556    45331556    C   T

Я даже пытался использовать отдельные переменные для печати h1, но проблема все еще сохранялась.

Есть идеи?

1 Ответ

0 голосов
/ 03 апреля 2019

Я думаю, что нам не хватает пары next заявлений? Надеемся также, что следующий исправленный код имеет форматирование, которое поможет прояснить и сделать код более понятным:

awk '
    BEGIN       { OFS = "\t"; h1 = ""; split("", arr) }
                { $1 = $1 }
    NR  == 1    { h1 = $0;                next }
    FNR == 1    { print h1, $0;           next }
    NR  == FNR  { arr[$1":"$2"-"$3] = $0; next }
    ($1 in arr) { print arr[$1], $0 }
    ' f2 f1 > res

Если мы хотим FS = OFS = "\t", мы можем указать это в разделе BEGIN и избавиться от переформатирования { $1 = $1 } буфера для вывода с разделителями табуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...