簡體   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