在匹配的字符串之前打印部

时间:2014-09-28 07:22:53

标签: awk sed grep

我想使用grep并打印前面(左)两个字符串之间匹配的部分,我只想考虑整个string1匹配string2的情况。

红色:我在file1中的字符串 enter image description here

字符串存储在file1和file2中。 我正在使用grep -f来突出字符串。

grep -f file1 file2

file1

ACUGUACAGGCCACUGCCUUGC
CUGCGCAAGCUACUGCCUUGCU
UGGAAUGUAAAGAAGUAUGUAU
....

file1

ACUGUACGCGCTATACACUGCCUUGCACUGUACAGGCCACUGCCUUGCGGC
CUGCGCAAGGGCTCUACUGCCUUGCUCUGCGCAAGCUACUGCCUUGCUCUGCGCAAATGAAGCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU

2 个答案:

答案 0 :(得分:0)

这应该有效:

while read pattern; do sed -n 's/'"${pattern}"'.*//p' file2; done < file1

我们在这里做的是为sed中的每个模式执行file1命令。在每个sed命令中,我们检查行中的给定模式,如果有,我们将模式及其后的所有内容替换为空(仅留下模式之前的内容)。

答案 1 :(得分:0)

与RevolutionTech的解决方案类似,您可以提前使用grep

while read -r line
do
    grep -Po "^\w*(?=$line)" f2
done < f1

这会循环播放file1的内容,对于每一行,grep s file2

查看前瞻的基本示例:让我们在找到文本hello之前打印出现的单词:

$ echo "this is aahello" | grep -Po '\w*(?=hello)'
aa

测试

$ while read line; do grep -Po "^\w*(?=$line)" f2; done < f1
ACUGUACGCGCTATACACUGCCUUGC
CUGCGCAAGGGCTCUACUGCCUUGCU
UGGAAUGUAGGAAGAAGTTTTGCGAGAGGGGAGAGUAUGUAUUGGAAUGUAAAGAAGUAUGUAU