繁体   English   中英

如何使用grep -f在终端中的文件上检测某些模式,并提取没有模式的行

[英]How to detect some pattern with grep -f on a file in terminal, and extract those lines without the pattern

我在Mac终端上。 我有一个txt文件,其中包含9个ID的一列allofthem.txt,其中每个ID都以“ rs”开头:

rs382216
rs11168036
rs9296559
rs9349407
rs10948363
rs9271192
rs11771145
rs11767557
rs11

此外,我还有另一个txt文件,有用.txt,其中包含在我进行的分析中有用的ID。 看起来是一样的,一列具有几行ID,但IDS少,只有5列。

rs9349407
rs10948363
rs9271192
rs11

问题:我想用无效的文件(出现在allofthem.txt中但没有出现在有用的.txt中的文件)生成一个新的txt文件。

我想做相反的事情:

grep -f useful.txt allofthem.txt 

我想使用一些系统的方法删除所有有用的ID,并获取包含其余ID的文件。 也许使用awk或sed,但是我看不到。 你能帮我吗? 提前致谢!

所需的输出:

rs382216
rs11168036
rs9296559
rs11771145
rs11767557

-v选项为您完成反操作:

grep -vxf useful.txt allofthem.txt > remaining.txt

-x选项匹配allofthem.txt中的整行,而不是部分。

正如@ hek2mgl正确指出的那样,如果要将有用.txt的内容视为字符串而不是模式,则需要-F

grep -vxFf useful.txt allofthem.txt > remaining.txt

确保文件中没有前导或尾随空格-它们可能会影响结果。

我建议使用awk

awk 'FNR==NR{patterns[$0];next} $0 in patterns' useful.txt allofthem.txt

说明:

FNR==NR是正确的,只要我们正在阅读useful.txt 我们为useful.txt每一行在patterns创建一个索引。 next停止进一步处理。

由于前面的next一条语句, $0 in patternsallofthem.txt每一行上allofthem.txt 它检查该文件的每一行是否是patterns的键。 如果检查结果为true awk将打印该行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM