我有一个文件包含一些位置,
head positions
142541687
142541814
142541910
142542976
142544533
142546366
142548674
142560386
我有另一个文件夹包含1800个文件,每个文件属于一个人(总共1800个人)。第 2 列是位置,第 4 列是个人 ID:
head NA20507.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_dp
1 142541687 78 NA20507
1 142535975 79 NA20507
1 142535976 79 NA20507
1 142535977 77 NA20507
1 142535978 78 NA20507
1 142535979 77 NA20507
或另一个人的例子,
head NA20901.mapped.ILLUMINA.bwa.GIH.low_coverage.20120522.bam_dp
1 142541687 135 NA20901
1 142535975 135 NA20901
1 142535976 137 NA20901
1 142535977 138 NA20901
1 142535978 138 NA20901
1 142535979 136 NA20901
1 142535980 135 NA20901
对于每个单独的文件,我只想保留那些具有位置文件中的位置的行(单个文件的第二列与位置文件匹配),但是我想单独为每个位置存储它!
cat NA20507.mapped.ILLUMINA.bwa.TSI.low_coverage.20130415.bam_dp_match142541687
1 142541687 78 NA20507
最后,我想合并所有个人的这些文件:例如,位置 142541687
head desired_pos142541687
1 142541687 78 NA20507
1 142541687 135 NA20901
或职位142542976;
desired_pos142542976
1 142535976 79 NA20507
1 142535976 137 NA20901
答案1
这或多或少与您已经遇到的类似问题的答案相同:首先读取一个文件(位置),然后解析其他文件并提取数据。
awk 'NR == FNR { pos[$1]=1; next } $2 in pos { f="desired_pos" $2; print >>f; close(f) }' positions NA*.bam_dp
如果给出问题中的两个单独文件,并且positions
包含 142535975,则将创建desired_pos142535975
包含以下内容的文件:
1 142535975 79 NA20507
1 142535975 135 NA20901
假设所有位置都涉及染色体 1(或至少是相同的染色体(如各个文件中的染色体),因为除了文件中的位置之外没有染色体名称信息positions
。