如何打印不包含* partial *模式的文件的所有行

时间:2017-03-05 23:09:25

标签: bash

我们知道grep -v模式文件会打印不包含模式的行。

我要搜索的文件是一张表:

Sample File, Sample Name, Panel, Marker, Allele 1, Allele 2, GQ, 
M090972.s-206_B01.fsa, M090972-206, Sample ID-1, SNPchr1, C, T,0.9933, 

我想淘汰包含" M090972-206"以及更多这样的模式。

我的搜索模式来自文本文件目录:

$ ls 20170227_snap_genotypes_1_VCF

M070370-208_S1.genome.vcf   M170276-201_S20.genome.vcf
M170308-201_S5.genome.vcf 

只有这些文件名的一部分直到第一个" _"在我的表格中(或第一个"。"如果我删除" .s"在示例中)。它不是一个恒定数量的字符。我可以在第一个"之后删除字符。"但是在sed和awk文档中找不到方法。

或者我尝试使用agrep 3.441和" -f"用于从

创建的临时文件中读取模式的选项
$ ls "directory" > temp.txt
$ ./agrep -v -f temp.txt $infile >> $outfile

agrep -f找不到任何匹配(或-v的所有内容)。 我错过了什么?是否有更好的方法,可能是sedawk

1 个答案:

答案 0 :(得分:0)

如果要从_目录中存在的文件名(直到第一个20170227_snap_genotypes_1_VCF)派生您的模式,那么您可以这样做:

# run from the parent of 20170227_snap_genotypes_1_VCF directory
grep -vf <(cd 20170227_snap_genotypes_1_VCF; ls | cut -f1 -d_) file