在linux中,如何基于包含特定名称的列表文件提取大表中的行

在linux中,如何基于包含特定名称的列表文件提取大表中的行,linux,unix,grep,row,extract,Linux,Unix,Grep,Row,Extract,我有一个非常大的数据表(DataTable.txt),快照如下: SNPname chr position sample1 sample2 sample3 sample4 ....sample2000 rs1 1 1000 A A B B ..... A rs2 2 1500 B A B A ..... B rs3 3 1503 B B A A ..... A . . . . rs99999 22 999999 A A A ...... B rs4560 rs4780 rs6 rs798 rs

我有一个非常大的数据表(DataTable.txt),快照如下:

SNPname chr position sample1 sample2 sample3 sample4 ....sample2000
rs1 1 1000 A A B B ..... A
rs2 2 1500 B A B A ..... B
rs3 3 1503 B B A A ..... A
.
.
.
.
rs99999 22 999999 A A A ...... B
rs4560
rs4780
rs6
rs798
rs2634
rs987
rs1839
rs3948
rs2423
rs232
我有一个snpname列表,我想将其包含在我的输出表中(不在此列表中的其他snpname将被排除)。列表(list.txt)如下所示:

SNPname chr position sample1 sample2 sample3 sample4 ....sample2000
rs1 1 1000 A A B B ..... A
rs2 2 1500 B A B A ..... B
rs3 3 1503 B B A A ..... A
.
.
.
.
rs99999 22 999999 A A A ...... B
rs4560
rs4780
rs6
rs798
rs2634
rs987
rs1839
rs3948
rs2423
rs232
如何生成只包含列表文件中列出的snpname的新输出表


请告知,谢谢。:)

您可以使用以下示例:

grep -wFf list.txt DataTable.txt
  • -w
    匹配单词
  • -f
    从文件
    list.txt
    获取模式
  • -F
    比较字符串本身,而不是可能的正则表达式
根据您的示例输入,并将
rs3
更改为
rs6
以进行匹配,我得到以下结果:

$ grep -wFf list.txt DataTable.txt
rs6 3 1503 B B A A ..... A
尝试一下:

grep -Fwf list.txt bigtable.txt

嗨,费多尔基。对不起,这是一个很大的文件,所以我花了一整天的时间来完成这个过程。是的,它可以工作,但不知何故,第一行的每个列都有标签,但没有一起提取。你能帮我吗?你好@user3446084,它没有被提取,因为它在
list.txt
中不匹配。您可以在
list.txt
中添加
SNPname chr position sample1 sample2 sample3 sample4….sample2000
行并再次处理,也可以将其附加到结果文件中。您可以在线程中找到一些不错的方法,例如
sed-i'1iSNPname chr position sample1 sample2 sample3 sample4….sample2000'文件
使其成功。如果我要在list.txt中添加SNPname chr position sample1 sample2 sample3 sample4….sample2000行并再次处理它,它会保留其表矩阵吗?这确实取决于您的文件,但它应该保留。但是,如果你花了一天的时间来处理所有的grep,我认为最好只添加标题
sed
,就像我在之前的评论中所描述的那样。复活节快乐!非常感谢fedorqui!你真的帮了大忙!:)愿上帝保佑你