输出中间的换行符

时间:2019-04-02 15:13:26

标签: awk

我正在尝试使用交叉位置的两个文件。
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 :(得分:0)

我认为我们缺少几条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 }重新格式化用于制表符分隔输出的缓冲区。