首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用awk循环遍历输入字符串中的字符

使用awk循环遍历输入字符串中的字符
EN

Stack Overflow用户
提问于 2011-12-19 23:46:52
回答 3查看 30.8K关注 0票数 25

信不信由你,我找不到答案,我认为这是一个非常基本的问题。

在awk中,我如何逐个遍历输入字符串?假设我只是想把它们打印出来。有没有我可以访问的数组?或者我需要使用substr吗?

基本上,就像这样:

echo "here is a string" | awk '
{ for(i=0; i<[length of input string]; i++) 
    printf [value at index i in array x]; 
}'

坦率地说,我很尴尬。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-19 23:53:27

可以使用split将字符串转换为数组

echo "here is a string" | awk '
{ 
  split($0, chars, "")
  for (i=1; i <= length($0); i++) {
    printf("%s\n", chars[i])
  }
}'

这会垂直打印字符,每行一个字符。

票数 46
EN

Stack Overflow用户

发布于 2011-12-20 00:18:25

默认情况下,在awk中,Field Separator (FS)spacetabs。由于您提到要循环遍历每个字符,而不是单词,我们将不得不将FS重新定义为nothing。像这样的东西-

[jaypal:~/Temp] echo "here is a string" | awk -v FS="" '
{for (i=1;i<=NF;i++) printf "Character "i": " $i"\n"}' 
Character 1: h
Character 2: e
Character 3: r
Character 4: e
Character 5:  
Character 6: i
Character 7: s
Character 8:  
Character 9: a
Character 10:  
Character 11: s
Character 12: t
Character 13: r
Character 14: i
Character 15: n
Character 16: g
票数 22
EN

Stack Overflow用户

发布于 2011-12-20 00:17:22

如果你有gawk:

awk '$0=gensub(/(.)/,"\\1\n","g")' file

测试:

kent$  echo "I am a String"|awk '$0=gensub(/(.)/,"\\1\n","g")'
I

a
m

a

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

https://stackoverflow.com/questions/8563745

复制
相关文章

相似问题

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