首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >awk子串连续多次出现

awk子串连续多次出现
EN

Stack Overflow用户
提问于 2013-02-12 02:11:34
回答 4查看 16.6K关注 0票数 2

我使用awk substr()从字符串中提取一个子字符串。

例如,如果我的字符串是这样的:

代码语言:javascript
运行
复制
qwertyuiop

我想提取(1-3)和(6-9)个字符,我使用下面的代码:

代码语言:javascript
运行
复制
awk '{print (substr($1, 1, 3) substr($1, 6, 4))}'  
qweyui

如何将一个特定的减法重复几次?

例如,我想提取(1-3) & (6-9)(6-9)(6-9) (6-9)个字符,得到如下结果:

代码语言:javascript
运行
复制
qweyuioyuioyuio

当然,我可以使用这样的命令:

代码语言:javascript
运行
复制
awk '{print (substr($1, 1, 3) substr($1, 6, 4) substr($1, 6, 4) substr($1, 6, 4))}'

有没有更简单的方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-12 04:24:18

这是解决此类问题的方法之一(混乱但有效)。

代码语言:javascript
运行
复制
 echo qwertyuiop | awk '{m=substr($1, 6, 4); {while (count++<3) string=string m; 
 print substr($1, 1, 3) string}}' 

 qweyuioyuioyuio
票数 0
EN

Stack Overflow用户

发布于 2013-02-12 06:54:44

如果你想提取不重叠的子串,你可以使用gawk的固定列宽选项:

代码语言:javascript
运行
复制
echo "qwertyuiop" | gawk -v FIELDWIDTHS="3 2 4" '{ print $1 $3 $3 $3 }'

您将定义3个列。第一个字符串的宽度为3个字符(与substr($1,1,3)相同)。第二个是2个字符宽(我们将忽略它)。第三个是第二个子字符串(substr($1,6,4))。

您可以直接打印已定义的字段。

请参阅https://www.gnu.org/software/gawk/manual/gawk.html#Constant-Size

票数 3
EN

Stack Overflow用户

发布于 2013-02-12 02:59:36

有一个delightful post解释了在awk中重复字符串的各种方式。

我将引用最明显的:

代码语言:javascript
运行
复制
function rep1(s,n,      r) {
# O(n) allocate/appends
# 2 lines of code
# This is the simplest possible solution that will work:
# just repeatedly append the input string onto the value
# that will be passed back, decrementing the input count
# until it reaches zero.
        while (n-->0) r = r s;
        return r;
}

PS:awk中函数参数前有大量空格,说明此参数被用作临时局部变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14818233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档