我想将一个文本文件中的行复制到另一个文本文件(如果它包含某种模式)

我想将一个文本文件中的行复制到另一个文本文件(如果它包含某种模式)

我有一个 .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 的第一列并将其提供给grepfile2 中的一组模式搜索。

您给定的示例数据中没有匹配的数据,但这有效。

答案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

相关内容