[英]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.