awk打印多个子字符串

awk打印多个子字符串,awk,substring,Awk,Substring,我想能够通过awk打印几个子字符串。 这里是我通常做的一个例子 awk' {print substr($0,index($0,string),10)} ' test.txt > result.txt 这允许我在发现字符串后打印10个字母。 但是结果是第一个子串,而不是我预期的几个 下面是一个使用字符串“ATGC”的示例: test.txt ATGCATATAAATGCTTTTTTTTT result.txt ATGCATATAA 而不是 ATGCATATAA ATGCTTTTTT

我想能够通过awk打印几个子字符串。 这里是我通常做的一个例子

awk' {print substr($0,index($0,string),10)} ' test.txt > result.txt
这允许我在发现字符串后打印10个字母。 但是结果是第一个子串,而不是我预期的几个

下面是一个使用字符串“ATGC”的示例:

test.txt

ATGCATATAAATGCTTTTTTTTT
result.txt

ATGCATATAA
而不是

ATGCATATAA
ATGCTTTTTT
我要补充什么

我相信答案对你们来说很简单! 谢谢您的帮助。

如果您有gawk(gnu awk),您可以使用
FPAT

awk -v FPAT='ATGC.{6}' '{for(i=1;i<=NF;i++)print $i}' file

awk-vfpat='ATGC.{6}'{for(i=1;i应该给输出什么样的输入,如
atgcttgctttttt
,其中
ATGC
发生在前一个
ATGC
之后的10个字符内?如果在第一个ATGC之后的10个字符中出现另一个ATGC,我也希望能够拥有这10个字符。以您的示例为例,我希望能够恢复atgcttg和ATGCTTTTTT。这是一个非常重要的用例,您应该将其包含在示例输入/输出中。请现在添加它。另外-如果ATGC后没有10个字符,是否应该输出任何内容?包括该用例以及您可以想到的任何其他非晴天用例。一旦您完成了,我们可以开始帮助您。我只是想要开始理解基本的awk语言是如何工作的,想要有比我在R中编写的代码更快的东西来做这个精确的分析,它遇到了你所说的所有这些可能性(重叠,大小,甚至串)。我不想让你做所有的工作,这就是为什么我没有精确地确定所有这些参数;我只是希望一个开始的解决方案能够学习一点,然后尝试构建其余的。虽然你没有得到一个开始的解决方案,你问到的问题有一个解决方案,因此它与pr完全不同,并且在任何方面都不适用于pr你实际遇到的问题。如果你的问题是用更具代表性的样本输入/输出来描述你的实际需求,那么你可能会得到一个答案,这可能是一个开始,也可能解决整个问题。谢谢你的帮助。我知道这与NF有关,但不知道如何应用。我要试试你的ans现在回答,然后告诉你它是否有效。再次感谢你。所以它工作没有问题。但是,正如@Ed_Morton之前问我的那样,如果第二个ATGC出现在10个字符之前,是否可以添加最后一个修改以恢复两个seaunces,而不是仅仅一个seaunces?例如:
$awk-v FPAT='ATGC.{6}'{(i=1;这不是最后一次修改,这是一次完全的重写。哦,好吧!那么我暂时保留这一点,看看以后如何解决其余的问题。说清楚了,以后再解决它是不可能的。这种方法非常适合你问到的问题,但不能适应你真正的问题。你需要从一个整体上重新开始这个问题的新方法。嗨,有了我以前在awk中的一些代码和一些sed,我终于做到了我想要的。谢谢你的帮助。
$ awk -v FPAT='ATGC.{6}' '{for(i=1;i<=NF;i++)print $i}' <<<"ATGCATATAAATGCTTTTTTTTT"                                                                                  
ATGCATATAA                                                                                                                                                                 
ATGCTTTTTT
awk '{print substr($0,1,10),RS substr($0,length -12,10)}' file

ATGCATATAA 
ATGCTTTTTT