Regex Grep基于一行的前12个字符,但输出整行
我有一个文件(patterns.txt),其中包含一个新行分隔的模式列表,例如:Regex Grep基于一行的前12个字符,但输出整行,regex,search,grep,Regex,Search,Grep,我有一个文件(patterns.txt),其中包含一个新行分隔的模式列表,例如: AAAA........ ....CCCC.... ........YYYY ATCC 我正在搜索的文件(table.txt)包含如下内容(大小为120gb): 我正在使用以下grep命令: grep -f patterns.txt table.txt 这将返回我的示例中的所有行。然而,如果我可以强制grep只查看前12个字符,那么第一行和第三行就不会返回(这是需要的) 这个grep是一个更大的程序的一部分。这
AAAA........
....CCCC....
........YYYY
ATCC
我正在搜索的文件(table.txt)包含如下内容(大小为120gb):
我正在使用以下grep命令:
grep -f patterns.txt table.txt
这将返回我的示例中的所有行。然而,如果我可以强制grep只查看前12个字符,那么第一行和第三行就不会返回(这是需要的)
这个grep是一个更大的程序的一部分。这意味着模式必须来自文件。但我可以改变文件的内容,如果需要的话
我在考虑用字符类[ACGTHY]替换所有的点。这意味着模式AAAA……。将变成:
AAAA[ACGTHY][ACGTHY][ACGTHY][ACGTHY][ACGTHY][ACGTHY][ACGTHY][ACGTHY]
这将提供所需的结果,但它似乎相当缓慢。有更好的方法吗
编辑:我也在考虑用\S替换点。你能修改patterns.txt吗
在这种情况下,在每行之前添加一个
^
就可以了。这将匹配您的模式,只有当他们开始一行。您将需要一些更强大的。尝试使用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
那么table.txt中的最后一行将不会由grepIn返回。在这种情况下,当模式长度不是12个字符时,您可以忽略行搜索的开始。但在这种情况下,我认为简单地编写一个脚本来为您实现这一点会更容易。120GB的文本文件意味着您应该使用数据库。
AAAAGTGTAAYY 0 9 1
HHHHHHHHYYYY 1 8 0
AAATCCCHHHHH 0 0 1