[英]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 patterns
在allofthem.txt
每一行上allofthem.txt
。 它检查该文件的每一行是否是patterns
的键。 如果检查结果为true
awk
将打印该行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.