[英]Grep based on first 12 characters of a line, but output entire line
我有一個文件(patterns.txt),其中包含一個新行分隔的模式列表,例如:
AAAA........
....CCCC....
........YYYY
ATCC
我正在搜索的文件(table.txt)包含這樣的內容(大小為120gb):
ZZZZAAAAGTGT 0 1 12
AAAAGTGTAAYY 0 9 1
GGGGTTTTCCCC 1 0 0
HHHHHHHHYYYY 1 8 0
AAATCCCHHHHH 0 0 1
我使用以下grep命令:
grep -f patterns.txt table.txt
這將返回我的示例中的所有行。 但是,如果我可以強制grep只查看前12個字符,那么將不會返回第一行和第三行(這是期望的)。
這個grep是一個更大的程序的一部分。 這意味着模式必須來自文件。 但是如果需要,我可以更改文件的內容。
我正在考慮用字符類[ACGTHY]替換所有的點。 這意味着AAAA ........模式將成為:
AAAA [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY] [ACGTHY]
這應該提供所需的結果,但它看起來很慢。 有沒有更好的方法呢?
編輯:我也在考慮用\\ S替換點。
你需要一些更強大的東西。 嘗試使用awk
:
awk 'FNR==NR { a[$1]++; next } { for (i in a) if ($1 ~ i) print }' patterns table
結果:
AAAAGTGTAAYY 0 9 1
HHHHHHHHYYYY 1 8 0
AAATCCCHHHHH 0 0 1
你能修改patterns.txt嗎?
在這種情況下,在每行之前添加^
將完成這一操作。 只有當他們開始一行時,這才會匹配您的模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.