我有两个带字符串的文件,其中fileA
中的字符串与fileB
中的部分字符串匹配。每个字符串都是唯一的,只有1个匹配项。
我想将fileA
中的字符串与fileB
中的字符串进行匹配,并在匹配前后打印匹配和10个字符。
也许grep -f
会起作用,但我如何获得前后10个字符。
FILEA
TGAGGTAGTAGTTTGTACAGTT
ACTGTACAGGCCACTGCCTTGC
TGAGGTAGTAGTTTGTGCTGTT
FILEB
CCAGGCTGAGGTAGTAGTTTGTACAGTTTGAGGGTCTATGATACCACCCGGTACAGGAGA
TAACTGTACAGGCCACTGCCTTGCCAGG
CTGGCTGAGGTAGTAGTTTGTGCTGTTGGTCGGGTTGTGACATTGCCCGCTGTGGAGATA
ACTGCGCAAGCTACTGCCTTGCTAG
GCTTGGGACACATACTTCTTTATATGCCCATATGAACCTGCTAAGCTATGGAATGTAAAG
AAGTATGTATTTCAGGC
CTGTAGCAGCACATCATGGTTTACATACTACAGTCAAGATGCGAATCATTATTTGCTGCT
CTAG
答案 0 :(得分:1)
您可以在fileA和grep:
上使用while循环while read line ; do
grep -o ".\{0,10\}$line.\{0,10\}" fileB.txt
done < fileA.txt
此示例假定fileA.txt的内容不包含可能破坏正则表达式的特殊字符。否则你需要逃脱它们:
while read line ; do
search=$(sed 's/[^[:alnum:]]/\\\0/g' <<< "$line")
grep -o ".\{0,10\}$search.\{0,10\}" fileB.txt
done < fileA.txt
答案 1 :(得分:1)
您可以使用sed预处理模式并通过stdin发送它:
sed 's/^/.{,10}/;s/$/.{,10}/' fileA | grep -oEf - fileB
这里,sed部分产生如下:
.{,10}TGAGGTAGTAGTTTGTACAGTT.{,10}
.{,10}ACTGTACAGGCCACTGCCTTGC.{,10}
.{,10}TGAGGTAGTAGTTTGTGCTGTT.{,10}
我们使用-E
选项来扩展正则表达式。 -
之后的-Ef
表示我们希望使用标准输入作为文件参数(到-f
)。