我有一个 .txt 文档,其中包含 rs-numbers(第一列)和其他变体: head:
rs2925757 A 0.113329
rs10929982 T 0.113329
rs2119812 C 0.182322
rs7629805 A 0.182322
rs6771792 C 0.19062
rs11709077 G 0.157004
rs13083375 G 0.14842
rs13064760 C 0.14842
rs7638903 G 0.14842
rs4684847 C 0.14842
我还有其他 txt 文档,如下所示(第 2 列中包含 rs 编号):
--- rs181860478 30004551 C A 0.000 0.000 1.000 0 -1 -1 -1
--- rs187641010:30004588:C:A 30004588 C A 0.000 0.001 1.000 0 -1 -1 -1
--- rs678486:30004607:A:G 30004607 A G 0.204 0.961 0.983 0 -1 -1 -1
--- rs145540866:30004629:C:A 30004629 C A 0.000 0.000 1.000 0 -1 -1 -1
--- 12:30004702:C:T 30004702 C T 0.000 0.001 1.000 0 -1 -1 -1
--- 12:30004732:A:G 30004732 A G 0.000 0.099 0.999 0 -1 -1 -1
--- exm-rs147708347 30004743 A C 0.001 0.965 1.000 0 -1 -1 -1
这意味着有时 rs 数字在列中单独存在,有时后面跟着:----------
,有时以 开头exm-
。
我希望能够从 txt 文件 2 中提取 txt 文件 1 中列出的所有 rs 号码。对于如何做到这一点有什么建议吗?
答案1
您可以使用以下命令。
grep -Fwe "$(awk '{print $1}' file1)" file2 >output.txt
这是获取 file1 的第一列并将其提供给grep
file2 中的一组模式搜索。
您给定的示例数据中没有匹配的数据,但这有效。
答案2
使用加入操作员 。假设分隔符是一个空格。
join -t ' ' -1 1 -2 1 \
<(sort -t ' ' -k1,1 file1.txt) \
<(tr ":" " " < file2.txt | cut -d ' ' -f 2 | sort -t ' ' -k1,1 )
PS:对于生物信息学问题,您应该使用http://biostars.org