对于我正在从事的项目,我需要一个需要专门匹配特定模式的标识符列表。
我基本上在一个文件中有一个模式列表,我想在另一个文件中使用该文件来 grep 来挑选出相关的行。
幸运的是,grep -f patternfile.txt otherfile.txt > releventlinesfile.txt
不起作用。都不grep -w
是。
otherfile.txt的文件结构为:
test_id gene_id gene locus sample_1 sample_2 status value_1 value_2 log2(fold_change) test_stat p_value q_value significant
TSS10019 XLOC_007800 ABC73140 1:27498963-27503819 BA BB NOTEST 0.666344 0.628569 -0.0841946 0 1 1 no
TSS1002 XLOC_000726 ABC14350 1:4907952-4913152 BA BB NOTEST 0 0 0 0 1 1 no
TSS10020 XLOC_007801 ABC73150 1:27504093-27506154 BA BB OK 11.8553 13.3817 0.174729 1.26968 0.02755 0.107242 no
TSS10021 XLOC_007802 ABC73165 1:27508724-27508949 BA BB NOTEST 0 0 0 0 1 1 no
TSS10022 XLOC_007803 ABC73170 1:27511324-27514797 BA BB OK 0.893787 0.557083 -0.682037 -0.590335 0.33135 0.575735 -no
并且patternfile.txt的文件结构是:
TSS10020
TSS10056
TSS10378
TSS10708
TSS11795
我想要的输出:
TSS10020 XLOC_007801 ABC73150 1:27504093-27506154 BA BB OK 11.8553 13.3817 0.174729 1.26968 0.02755 0.107242 no
答案1
您需要结合使用-w
和-f
选项,grep
以便仅匹配整个单词,而不是在结果中获得部分匹配:
grep -wf patternfile.txt otherfile.txt > releventlinesfile.txt
答案2
我对文件的数量有点困惑。
- lijst_expressie.txt
- sig_splicing.txt
- 拼接.diff
- tss_group_exp.diff
- tss_lijst.txt
归结为:
我想从 splicing.diff 中的 lss_lijst.txt 中找到 TSS
使用简短的列表:tss_lijst.txt
TSS1
TSS10
并且splicing.diff
您给出的,您可以使用以下命令提取 file1 中列出的 TSS
awk 'NF==1{ tss[$1]=1 ; next ; } $1 in tss { print ;}' tss_lijst.txt splicing.diff
TSS1 XLOC_000001 AT1G01010 1:3630-5899 BAY_ST BAY_LP OK 0 0 0.219269 0 0.1726 0.474413 no
TSS10 XLOC_000007 AT1G01180 1:75404-76921 BAY_ST BAY_LP OK 0 0 0.0277474 0 0.77985 0.900632 no
得到肯定
awk '$14 == "yes" ' splicing.diff