Ale*_*dro 4 grep awk string search
我有两个文件 A 和 B。 A 看起来像这样(4 到 6 行):
GAGA
CAGA
GGGT
TATT
Run Code Online (Sandbox Code Playgroud)
文件 B 是一个非常大的文件,有数千行,下面是一个简短的例子:
AAATGTCAAGAGACAGAAATGTCAAGAGGGT
AAGGGGGTTTATAATCATAAATCAAAGAAAT
ATATACAGAAATGTCAAGAGACAGAAATGTC
TCAAGAGACAGAAATGTCAAGAGGGTCTATA
AAGAGGGTCTATAATCATAAATCAAAGAAAT
AAGAGGGTCTATAATCATAAATCAAAGAAAT
ATACAGAAATGTCAAAACAGAAATGTCAAGG
ATATACAGAATATACAGAAATGTCAAGTTAT
ACAGAATATACAGAAATGTCAAGTTATATAC
ATATACAGAAATGTCAAGAGACAGAAATGTC
TCAGAATATAGTATTCTATTATATACAGAAA
AATATAGTATTCTATTATATACAGAAATGTC
GAATATACAGAAATGTCAAGTTATATACAGA
TATACAGAATATAGTATTCTATTATATACAG
CAGAATATAGTATTCTATTATATACAGAATA
AGTTATATACAGAATATAGTATTCTATTATA
TACAGAATATAGTATTCTATTATATACAGAA
CAGAAATGTCAAGTTATATACAGAATATAGT
Run Code Online (Sandbox Code Playgroud)
我需要在文件 B 的所有行中搜索文件 A 中的每个字符串,并从文件 B 中恢复包含 A 中每个字符串的前 10 行。我尝试过 grep 和 awk,但效果不佳。谢谢
既然您的模式只有四到六行,为什么不在 OR 模式中使用它们呢?对第二个文件“bigDNA.txt”进行操作的限制为 10 个匹配项的示例:
grep -E 'GAGA|CAGA|GGGT|TATT' -m 10 bigDNA.txt
Run Code Online (Sandbox Code Playgroud)
这将使您免于手动键入文件中的模式patt.txt
。它通过以下方式连接行|
(附加|
到每一行,删除换行符,删除尾随|
):
grep -E "$(sed 's#$#|#' patt.txt | tr -d '\n' | sed 's#|$##')" -m 10 bigDNA.txt
Run Code Online (Sandbox Code Playgroud)