簡體   English   中英

Grep基於一行的前12個字符,但輸出整行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM