信不信由你,我找不到答案,我认为这是一个非常基本的问题。
在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];
}'
坦率地说,我很尴尬。
发布于 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])
}
}'
这会垂直打印字符,每行一个字符。
发布于 2011-12-20 00:18:25
默认情况下,在awk
中,Field Separator (FS)
是space
或tabs
。由于您提到要循环遍历每个字符,而不是单词,我们将不得不将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
发布于 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
https://stackoverflow.com/questions/8563745
复制相似问题