【发布时间】:2018-01-10 10:35:28
【问题描述】:
我有两个文件,并且想根据第二个文件(条件文件)满足的多个条件来标记一个文件(数据文件)的行。
数据文件:
支架 核苷酸位置 x SNP1 SNP2 001 345。 G T 001 568。 GC 001 1945 年。 TC 001 5001。 TA 001 5600。 TG 001 6001。在 001 10889。甲 001 12001。 TA 001 15001。甲 002 45 . C T 002 104 . G T 002 598。钙 002 4800。 TA 002 5001。 GC 002 7200。 TA 002 9845。甲乙 002 11001。 TC 002 13450。甲 003 123 . C T 003 125 .甲乙 003 155 .交流电 003 500 . TC 003 983 . CG 003 1001。 G T 004 2 .甲乙 004 567。 TC 004 901。钙 004 5672。 TG 004 9001。 CG 004 10098。一个T条件文件:
Scaffold Locus_type Min Max 001 外显子 4456 5543 001 外显子 5678 6668 001 外显子 8955 9939 001 外显子 10778 13444 002 外显子 4785 4800 002 外显子 5200 8000 002 外显子 10000 12000 003 外显子 124 154 003 外显子 854 1025 004 外显子 21 852 004 外显子 8951 9512
期望的输出:
001 345。 G T 001 568。 GC 001 1945 年。 TC 001 5001。 T A *外显子中的 SNP 001 5600。 TG 001 6001。外显子中的 T *SNP 001 10889。 G A *外显子中的 SNP 001 12001。 T A *外显子中的 SNP 001 15001。甲 002 45 . C T 002 104 . G T 002 598。钙 002 4800。 T A *外显子中的 SNP 002 5001。 GC 002 7200。 T A *外显子中的 SNP 002 9845。甲乙 002 11001。 T C *外显子中的 SNP 002 13450。甲 003 123 . C T 003 125 .外显子中的 A G *SNP 003 155 .交流电 003 500 . TC 003 983 . C G *外显子中的 SNP 003 1001。 G T *外显子中的SNP 004 2 .甲乙 004 567。 TC 004 901。钙 004 5672。 TG 004 9001。 C G *外显子中的 SNP 004 10098。 A T使用 awk 的命令失败:
awk 'NR==FNR{a[$1]=$3 FS=="\t" $4;next}{if (a[$1]==$1 && $3<=$2 && $4>=$2) 打印 $0, "*外显子中的单核苷酸多态性"; else print $0, "";}' Condition_file.txt Data_file.txt基本上,我只想标记数据文件中包含核苷酸 (SNP) 的行,该核苷酸 (SNP) 落在第二个文件(或条件文件)中列出的每个已识别外显子的范围(最小值和最大值)内。每个支架有多个 SNP 和外显子,我认为这是导致 awk 命令出现问题的原因。
注意:我的真实数据文件有数千个支架、SNP 和外显子
这似乎是一个非常基本的问题,但鉴于我的经验有限,我不知所措。非常感谢您的帮助。
【问题讨论】:
标签: arrays bash shell awk compare