【发布时间】:2019-11-29 16:52:19
【问题描述】:
我有 2 个文件,如下所示: 文件1.txt
chr pos ref totoal A C T G
chr1 2488104 A 8690 99.954 0.0230 0 0.0230
chr1 2488105 T 8847 0 99.954 0.022 0.0226
chr1 2488106 G 8902 0.011 0.0337 0 99.955
chr1 2488107 G 8875 0 0.02252 0 99.977
chr1 2488108 A 8674 99.919 0 0.011 0.0691
chr1 2488109 G 9116 0.021 0.0658 0 99.912
chr1 2488110 C 9191 0.087 0.0652 99.847 0
chr1 2488111 C 9291 0 0.0430 99.956 0
chr1 2488112 T 9254 0 100 0 0
chr1 2488113 C 9354 0 0.0427 99.957 0
chr1 2488114 C 9493 0 0.0842 99.915 0
还有一个file2.txt:
chr1 2488111 T 0.09
chr1 2488105 C 0.053
chr1 2488115 G 0.03
如果 $1 和 $2 在两个文件之间匹配,我想提取 file1 的 A-D 列的数值。选择什么列提取应取决于 file2 的 $3 字段(即对于“chr1 2488111 T”,我将返回“99.956”,因为它是“T”列中 chr1 位置 2488111 报告的值。
我找到了一堆代码来匹配两个文件之间的字段,但我不能只取回我感兴趣的值。 AWK 如下:
awk '
BEGIN {FS = OFS = "\t"
}
NR==FNR {for (n = split ($2, a); n>0; n--) CMP[$1, a[n]]
next
}($1,$2) in CMP {print $0
}
' file2.txt file1.txt
我希望根据字段之间的匹配以及 file2 的 $3 与 file1 的标头之间的匹配,从 file1 中提取单个值。
理想的输出是报告 file2 的原始行,并在行尾附加值:
chr1 2488111 T 0.09 99.956
chr1 2488105 C 0.053 0
chr1 2488115 G 0.03 NA
【问题讨论】:
-
为什么预期输出的第二行是
chr1 2488105 C 0.053 0而不是chr1 2488105 C 0.053 99.954? -
你完全正确!我看错了专栏的标题!
标签: arrays awk pattern-matching