Grep基于一行的前12个字符,但输出整行

时间:2012-11-21 14:53:42

标签: regex search grep

我有一个文件(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替换点。

2 个答案:

答案 0 :(得分:2)

你需要一些更强大的东西。尝试使用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

答案 1 :(得分:1)

你能修改patterns.txt吗?

在这种情况下,在每行之前添加^就可以了。只有当他们开始一行时,这才会匹配您的模式。