我正在尝试使用交叉位置的两个文件。
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,但问题仍然存在。
有什么见解吗?
答案 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 }
重新格式化用于制表符分隔输出的缓冲区。